我有一个看起来像下面的pandas df
df = pd.DataFrame({'Amount': [1,2,3,4,6,7],
'Name': ['person1', 'person1' ,'person2' ,'person2','person3','person3'],})
我要做的是创建第三列,显示每个人的最低金额。最有效的方法是什么?
答案 0 :(得分:2)
关键是使用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]