2016-05-19 1 views
0

Я пытаюсь иметь дисплей NS, если число точек данных для каждой отрасли за квартал составляет менее 4.Панда: среднее, если LEN больше 4 для сводной таблицы

Вот мой источник данных:

print df 

         IndustryGroup Year_ Quarter TotalRaisedUSD 
          Healthcare 2014_  1  79.30000 
        Consumer Services 2014_  1  111.25000 
       Information Technology 2014_  1  232.00000 
          Healthcare 2014_  1  113.90000 
          Healthcare 2014_  1  121.11000 
          Healthcare 2014_  1  108.76000 
          Healthcare 2014_  1  58.64000 
          Healthcare 2014_  1  120.07000 
          Healthcare 2014_  1  81.76000 
          Healthcare 2014_  1  28.40000 
          Healthcare 2014_  1  76.63000 
          Healthcare 2014_  1  74.96217 
          Healthcare 2014_  1  57.86000 
          Healthcare 2014_  1  220.23000 
           ...  ...   ...  ... 
          Healthcare 2014_  4  109.70000 
        Consumer Services 2014_  4  358.50000 
          Healthcare 2014_  4  115.00000 
       Information Technology 2014_  4  168.05000 
     Business and Financial Services 2014_  4  100.66000 
          Healthcare 2014_  4  72.09000 
          Healthcare 2014_  4  129.67000 
          Healthcare 2014_  4  151.00000 
          Healthcare 2014_  4  123.28000 
          Healthcare 2014_  4  153.85000 
     Business and Financial Services 2014_  4  47.41000 
          Healthcare 2014_  4  35.34000 
          Healthcare 2014_  4  206.50000 
          Healthcare 2014_  4  31.00000 
          Healthcare 2014_  4  68.09000 
          Healthcare 2014_  4  122.02000 
     Business and Financial Services 2014_  4  193.22000 
       Information Technology 2014_  4  254.34000 
       Information Technology 2014_  4  196.50000 


df1=pd.pivot_table(df,values='TotalRaisedUSD',index='IndustryGroup',columns=['Year_','Quarter'], np.median) 

мне нужен один и тот же выход df1 но ​​отображающее «NS» если количество TotalRaisedUSD меньше 4 (Например: Информационные технологии 2014_ 4 должен показывать NS)

[108 rows x 4 columns] 
    Year_        2014_       
    Quarter        1  2  3  4 
    IndustryGroup             
    Business and Financial Services 49.73 71.275 38.00 100.66 
    Consumer Services    111.25 165.600 NaN 358.50 
    Healthcare      87.10 82.335 84.53 118.51 
    Industrial Goods and Materials  NaN 144.490 NaN  NaN 
    Information Technology   82.13 68.000 55.93 196.50 

Любые идеи?

Спасибо!

+0

Это трудно сказать, без примера, но вы можете попробовать 'groupby' (вдоль [этих линий] (http://stackoverflow.com/a/19385591/ 5276797), например). – IanS

ответ

0

Вы можете использовать groupby и transform для достижения этой цели:

grouped = df.groupby(['IndustryGroup','Year']) 

logic= lambda x: 'NS' if x.count() < 4 else '' 

transformed = grouped.transform(logic) 

Я считаю, что-то, как это должно работать.

Вы можете прочитать об этом здесь: http://pandas.pydata.org/pandas-docs/stable/groupby.html

+0

Работает, спасибо много! – CyNe

+0

, тогда, пожалуйста, продолжайте и примите ответ! – elelias

Смежные вопросы