【发布时间】:2014-04-02 18:13:07
【问题描述】:
我有一个如下所示的 pandas df
df = pd.DataFrame({'Amount': [1,2,3,4,6,7],
'Name': ['person1', 'person1' ,'person2' ,'person2','person3','person3'],})
我要做的是创建第三列,显示每个人的最低金额。最有效的方法是什么?
【问题讨论】:
我有一个如下所示的 pandas df
df = pd.DataFrame({'Amount': [1,2,3,4,6,7],
'Name': ['person1', 'person1' ,'person2' ,'person2','person3','person3'],})
我要做的是创建第三列,显示每个人的最低金额。最有效的方法是什么?
【问题讨论】:
关键是使用groupby,它非常有用,我强烈建议阅读那里链接的文档部分。你可以得到一个Series 与每个人的最小值:
>>> df.groupby("Name")["Amount"].min()
Name
person1 1
person2 3
person3 6
Name: Amount, dtype: int64
或与DataFrame相同的信息:
>>> df.groupby("Name", as_index=False)["Amount"].min()
Name Amount
0 person1 1
1 person2 3
2 person3 6
[3 rows x 2 columns]
或者,如果您真的想在原始数据框中添加一列,可以使用transform:
>>> df["Minimum_Amount"] = df.groupby("Name")["Amount"].transform('min')
>>> df
Amount Name Minimum_Amount
0 1 person1 1
1 2 person1 1
2 3 person2 3
3 4 person2 3
4 6 person3 6
5 7 person3 6
[6 rows x 3 columns]
【讨论】: