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

2024-05-19 19:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的数据框,其中一列有一组名称。不幸的是,同一列中还有一些其他数据。我要做的是找到包含名称的所有行,在另一列中查找这些行,从第三列中获取最大值。然后,我需要将该值与名称放在同一行中

我目前正在使用一个for循环,它完全符合我的要求,但速度非常慢。我试过玩弄lookup,但没能让它发挥作用。请记住,真正的数据帧大约有20000行

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())

Tags: 数据import名称dffordatanpnan
2条回答

IIUC,你可以使用

df['Wins'].update(df['Name'].map(df.groupby('Owner')['Wins'].max()))

使用Owner上的^{}然后使用agg函数max创建映射序列s,现在使用序列s使用^{}中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

相关问题 更多 >