【发布时间】:2020-10-14 19:57:40
【问题描述】:
假设我有一个类似的 DataFrame
import pandas as pd
df = pd.DataFrame({
'Id' : [1,2,3,4,5,6,7,8,9],
'Group' : [1,1,2,2,2,2,3,3,3],
'Value_to_compare' : [2,1,5,8,2,3,10,23,17],
'Other_value' : [0,3,2,6,3,4,2,7,1]
})
我想创建一个新列,比如Value_of_Highest,显示在其Group 中具有最高Value_to_compare 的元素的每一行Other_value。例如,这里:
- 组 1 有 2 个元素,其最高的
Value_to_compare为 2,Id= 1,其中Other_value为 0 - 第 2 组有 4 个元素,最高
Value_to_compare为 8,Id= 4,其中Other_value为 6 - 第 3 组有 3 个元素,最高
Value_to_compare为 23,Id= 8,其中Other_value为 7
所以我想加一列让df变成
这是我知道的最好的方法:
def my_func(x):
x = x.sort_values('Value_to_compare',ascending = False)
Value_of_Highest = x.head(1)['Other_value'].values[0]
return pd.Series([Value_of_Highest], index=['Value_of_Highest'])
grouped = df.groupby('Group').apply(my_func).reset_index()
df = df.merge(grouped)
我很确定在 Python/Pandas 中有一种更优雅、更有效的方法。
编辑:在@CameronRiddell 第一次回答后,我意识到我的示例存在缺陷。我更正了它,@CameronRiddell 编辑了他的答案,效果很好。
【问题讨论】:
标签: python-3.x pandas dataframe pandas-groupby