我在转换到用于分组的列具有NaN值的组时遇到问题。
以下代码曾用于,直到imshow
版本 0.19.1 。现在我已将环境更新为版本 0.20.3 ,不再有效。
示例代码:
waitKey
从版本pandas
开始,它会引发以下错误消息:
ValueError:长度不匹配:预期轴有90个元素,新值有100个元素
阅读doc后,我理解这是一种新的行为;不是错误。
但我不清楚如何更新我的代码,或解决这个问题。
我的目标是让所有(输出)值,但import numpy
import pandas
df = pandas.DataFrame({'A':numpy.random.rand(100),
'B':numpy.random.rand(100)*10,
'C':numpy.random.randint(0,10,100)})
df.loc[:9,'C']=None
df.groupby('C')['B'].transform(lambda x:x.mean())
的值是每个组的平均值(即0.20.3
)的结果。前10个输出'价值(C==None
)将保持不变(与' mean
')相同。
有什么建议吗?
提前致谢。
答案 0 :(得分:0)
我们mask
并使用cumsum
唯一标识那些NaN:
new_c = df['C'].mask(df['C'].isnull(),df['C'].isnull().cumsum())
df.groupby(new_c)['B'].transform('mean')
或者,如果你测试一些更复杂的功能
df.groupby(new_c)['B'].transform(lambda x: x.mean())
输出:
Out[54]:
0 5.249441
1 4.987245
2 5.245857
3 6.450159
4 4.017234
5 4.421589
6 3.673986
7 4.746087
8 5.841651
9 5.394510
10 4.421589
11 4.421589
12 4.746087
13 4.746087
14 6.450159
15 6.450159
16 3.813816
17 5.249441
18 5.841651
19 3.813816
20 3.673986
21 4.017234
22 6.450159
23 3.673986
24 4.987245
25 5.245857
26 4.017234
27 4.017234
28 6.450159
29 4.987245
....