Python 如何将数据帧中另一列的简单值聚合到最小值中?
在下面的DataFrame中,我想进行一次聚合计算(最小值),同时简单地添加另一列中的值。我能够解决这个问题,但我怀疑Python 如何将数据帧中另一列的简单值聚合到最小值中?,python,pandas,Python,Pandas,在下面的DataFrame中,我想进行一次聚合计算(最小值),同时简单地添加另一列中的值。我能够解决这个问题,但我怀疑gb.agg中有一个更简单的解决方案 import numpy as np import pandas as pd df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'], 'B' : ['one', 'one', 'two', 'three', 'two', 'two'
gb.agg
中有一个更简单的解决方案
import numpy as np
import pandas as pd
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'], 'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'C' : np.random.randn(8), 'D' : np.random.randn(8)})
这可能会产生如下数据帧:
A B C D
0 foo one 0.229 0.902
1 bar one 0.594 1.917
2 foo two -0.913 2.444
3 bar three -0.628 -0.902
4 foo two -0.223 -1.063
5 bar two -0.223 0.311
6 foo one -0.592 0.964
7 foo three 0.869 0.817
如何仅仅因为D与聚合中的最小C位于同一行而添加D
更详细地说,对于“foo”和“bar”两个组,C都取最小值。我的目标是同时取D列对应行中的数据。请注意,我不想要的是df.groupby('A').min()
,它将为每一列返回类别的最小值
一种可能的解决办法是:
ndf = df.groupby('A').agg({'C': {'Cmin': np.min}}).reset_index()
ndf.columns = ['A', 'C']
pd.merge(ndf, df.loc[:,['A','C','D']], how='left', on=['A','C'])
其结果是:
A C D
0 bar -0.628 -0.902
1 foo -0.913 2.444
但是我想知道Python 3中是否有更优雅的东西可以直接在groupby.agg中使用,例如?这应该可以。我们使用
idxmin
按组检索列最小值的索引值,然后通过iloc
使用此索引。最后,您可以删除任何不需要的列
谢谢,这就是我一直在寻找的!
df.iloc[df.groupby('A')['C'].agg(pd.Series.idxmin)].drop('B', 1)