piR*_*red 6 python group-by pandas pandas-groupby
我发布这个是因为这个话题刚刚出现在另一个问题/答案中,并且行为记录不清楚.
考虑数据帧 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
Run Code Online (Sandbox Code Playgroud)
我想获得由列定义的每个组的第一行和最后一行'A'
.
我试过了
df.groupby('A').B.agg(['first', 'last'])
first last
A
x 1.0 2.0
y 3.0 4.0
Run Code Online (Sandbox Code Playgroud)
但是,这并没有给我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
Run Code Online (Sandbox Code Playgroud)
一种选择是使用该.nth
方法:
>>> gb = df.groupby('A')
>>> gb.nth(0)
B
A
x NaN
y 3.0
>>> gb.nth(-1)
B
A
x 2.0
y NaN
>>>
Run Code Online (Sandbox Code Playgroud)
但是,我还没有找到一种方法来整齐地聚合它们.当然,人们总是可以使用pd.DataFrame
构造函数:
>>> pd.DataFrame({'first':gb.B.nth(0), 'last':gb.B.nth(-1)})
first last
A
x NaN 2.0
y 3.0 NaN
Run Code Online (Sandbox Code Playgroud)
注意:我明确使用了该gb.B
属性,否则你必须使用.squeeze
归档时间: |
|
查看次数: |
975 次 |
最近记录: |