Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将数据帧中另一列的简单值聚合到最小值中?_Python_Pandas - Fatal编程技术网

Python 如何将数据帧中另一列的简单值聚合到最小值中?

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'

在下面的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', '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)