我在处理 pandas 中的分组对象时遇到了一些麻烦。具体来说,我希望能够将列中的第一行设置为 0,同时保持其他行不变。
例如:
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'] * 2,
'B': rand.randn(6),
'C': rand.rand(6) > .5})
给我
A B C
0 foo 1.624345 False
1 bar -0.611756 True
2 baz -0.528172 False
3 foo -1.072969 True
4 bar 0.865408 False
5 baz -2.301539 True
我将它们按 A 分组并按 B 排序:
f = lambda x: x.sort('B', ascending=True)
sort_df = df.groupby('A',sort=False).apply(f)
得到这个:
A B C
A
foo 3 foo -1.072969 True
0 foo 1.624345 False
bar 1 bar -0.611756 True
4 bar 0.865408 False
baz 5 baz -2.301539 True
2 baz -0.528172 False
现在我有了组,我希望能够将每个组中的第一个元素设置为 0。我该怎么做?
像这样的东西会起作用,但我想要一种更优化的方法:
for group in sort_df.groupby(level=0).groups:
sort_df.loc[(group,sort_df.loc[group].index[0]),'B']=0
任何帮助将不胜感激,谢谢!