我发布这个是因为这个主题刚刚在另一个问题/答案中被提出,并且行为没有很好的记录。
考虑数据框 df
df = pd.DataFrame(dict(
A=list('xxxyyy'),
B=[np.nan, 1, 2, 3, 4, np.nan]
))
A B
0 x NaN
1 x 1.0
2 x 2.0
3 y 3.0
4 y 4.0
5 y NaN
我想获取由 'A'
列定义的每个组的第一行和最后一行。
我试过了
df.groupby('A').B.agg(['first', 'last'])
first last
A
x 1.0 2.0
y 3.0 4.0
但是,这并没有给我预期的 np.NaN
。
如何获取每个组中的实际第一个和最后一个值?
最佳答案
groupby.first和 groupby.last方法分别返回第一个和最后一个非空值。
要获取实际的第一个和最后一个值,请执行以下操作:
def h(x):
return x.values[0]
def t(x):
return x.values[-1]
df.groupby('A').B.agg([h, t])
h t
A
x NaN 2.0
y 3.0 NaN
关于python - 为什么 groupby 中的 first 和 last 不给我 first 和 last,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45744800/