获取数据帧中列的最大行数并保留不同行的信息

问题描述 投票:0回答:1

希望有人能帮助我解决这个问题。我有几个数据帧,其中包含相应的 id 和名称的值。对于每个 id,我想要所有数据帧的最大值,但现在我还必须为哪个名称出现此最大值。

该示例仅显示了两个数据帧,但我确实有大约 100 个数据帧,其中还包含大约 100 个 id,因此不能只取最大值,然后检查其中一个数据帧中包含哪些值并从那里获取名称。

我尝试过使用 groupby 但无法让它工作。

import pandas as pd
d1 = pd.DataFrame()
d2 = pd.DataFrame()
d1['id'] = [1,2,3,4,5]
d2['id'] = [1,2,3,4,5]
d1['max'] = [10,20,30,40,50]
d2['max'] = 25
d1['name'] = 'name_1'
d2['name'] = 'name_2'
df_max_list=[d1, d2]
df_max_out=pd.concat(df_max_list).groupby(level=0).max()

得到结果:

    id  max name
0   1   25  name_2
1   2   25  name_2
2   3   30  name_2
3   4   40  name_2
4   5   50  name_2

预期结果:

    id  max name
0   1   25  name_2
1   2   25  name_2
2   3   30  name_1
3   4   40  name_1
4   5   50  name_1
python pandas dataframe group-by
1个回答
0
投票

您可以将

id
设置为索引并使用
where
:

tmp1 = d1.set_index('id')
tmp2 = d2.set_index('id')

out = out = tmp1.where(tmp1['max'].gt(tmp2['max']), tmp2).reset_index()

如果您的数据框已经在

id
上对齐,您可以将上面的内容简化为:

out = d1.where(d1['max'].gt(d2['max']), d2)

输出:

   id  max    name
0   1   25  name_2
1   2   25  name_2
2   3   30  name_1
3   4   40  name_1
4   5   50  name_1
© www.soinside.com 2019 - 2024. All rights reserved.