[英]How can I get the max value from one column where values match another column?
我有一个非常大的 dataframe ,其中一列中有一组名称。 不幸的是,同一列还有一些其他数据。 我想要做的是找到所有包含名称的行,在另一列中查找那些行,从第三列中获取最大值。 然后,我需要将该值与名称放在同一行中。
我目前正在使用for
循环,这正是我想要的,但它非常慢。 我试过用lookup
来鬼混,但无法让它工作。 请记住,真正的 dataframe 大约有 20,000 行!
import pandas as pd
import numpy as np
friends = ['Mickey', 'Minnie', 'Goofy', 'Donald', 'Daisy', 'Pluto']
df_data = {'Name':['Mickey', 'Ravens', 'Vikings',
'Minnie', 'Packers', 'Browns',
'Goofy', 'Cowboys', 'Steelers',
'Donald', '49ers', 'Bears',
'Daisy', 'Chiefs', 'Raiders',
'Pluto', 'Patriots', 'Colts'],
'Owner': [np.nan, 'Mickey', 'Mickey',
np.nan, 'Minnie', 'Minnie',
np.nan, 'Goofy', 'Goofy',
np.nan, 'Donald', 'Donald',
np.nan, 'Daisy', 'Daisy',
np.nan, 'Pluto', 'Pluto'],
'Wins': [np.nan, 14, 10,
np.nan, 13, 6,
np.nan, 8, 8,
np.nan, 13, 8,
np.nan, 12, 7,
np.nan, 12, 7]}
df = pd.DataFrame(data = df_data)
for f in friends:
df.loc[df['Name'] == f, 'Wins'] = df.loc[df['Owner'] == f, 'Wins'].max()
print(df.to_string())
IIUC,你可以使用
df['Wins'].update(df['Name'].map(df.groupby('Owner')['Wins'].max()))
在Owner
上使用DataFrame.groupby
然后使用agg
function max
创建映射系列s
,现在使用系列s
使用Series.update
更新df
中Wins
列中的值:
s = df.groupby('Owner')['Wins'].max()
df = df.set_index('Name')
df['Wins'].update(s)
df = df.reset_index()
# print(df)
Name Owner Wins
0 Mickey NaN 14.0
1 Ravens Mickey 14.0
2 Vikings Mickey 10.0
3 Minnie NaN 13.0
4 Packers Minnie 13.0
5 Browns Minnie 6.0
6 Goofy NaN 8.0
7 Cowboys Goofy 8.0
8 Steelers Goofy 8.0
9 Donald NaN 13.0
10 49ers Donald 13.0
11 Bears Donald 8.0
12 Daisy NaN 12.0
13 Chiefs Daisy 12.0
14 Raiders Daisy 7.0
15 Pluto NaN 12.0
16 Patriots Pluto 12.0
17 Colts Pluto 7.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.