当我执行以下操作时
print(dataframe.groupby(['Latitude','Longitude','Year','Day'])['Yield'].unique())
我得到了奇怪的结果(只显示了一部分)
Latitude Longitude Year Day
39.338764 -85.241940 2009 141 [69.9123985]
* 2010 145 [60.184353, 59.7501973333, 52.523612]
* 2011 157 [62.324484, 44.512905]
* 2012 139 [57.240542625]
* 2013 141 [73.2846975, 67.992009]
* 2012 139 [55.4780421429]
对于Year = 2010和Day = 145,我得到三个值
而对于Year = 2012和Day = 139,我得到两个分开的值,当我应用函数mean()时,这两个值无法平均。
为什么呢?
P.S。它是0.20.1 pandas版本,我在dataframe中没有任何其他变量
答案 0 :(得分:4)
我认为lambda
和unique
需要numpy.mean
功能,因为unique
会返回numpy数组:
print(dataframe.groupby(['Latitude','Longitude','Year','Day'])['Yield'].apply(lambda x: np.mean(x.unique())))
<强>示例强>:
df = pd.DataFrame({'Latitude':list('aaabab'),
'Yield':[1,1,4,5,5,4],
'Longitude':list('aaabbb')})
print (df)
Latitude Longitude Yield
0 a a 1
1 a a 1
2 a a 4
3 b b 5
4 a b 5
5 b b 4
print(df.groupby(['Latitude','Longitude'])['Yield'].unique())
Latitude Longitude
a a [1, 4]
b [5]
b b [5, 4]
Name: Yield, dtype: object
print(df.groupby(['Latitude','Longitude'])['Yield'].apply(lambda x: np.mean(x.unique())))
Latitude Longitude
a a 2.5
b 5.0
b b 4.5
Name: Yield, dtype: float64
替代解决方案:
print (df.drop_duplicates(['Latitude','Longitude', 'Yield']).groupby(['Latitude','Longitude'])['Yield'].mean())
Latitude Longitude
a a 2.5
b 5.0
b b 4.5
Name: Yield, dtype: float64