繁体   English   中英

如何从值与另一列匹配的一列中获取最大值?

[英]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更新dfWins列中的值:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM