使用特定的变化变量在数据帧上重复

2024-05-06 19:10:46 发布

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

我有许多看起来类似于以下内容的数据帧:

df1:
country  value
A        8.518074e+11
B        1.138434e+11
C        8.745698e+10
D        7.543453e+10
E        6.387533e+10

df2:
country  value
A        3.897267e+10
B        3.589588e+10
C        3.077954e+10
D        2.868014e+10
E        2.690948e+10

等等。df1、df2等是包含同一组(国家)变量和不同值的不同类别。目标是获取所有数据帧,并获得每个国家的最大值类别。在上面的例子中,例如:

A, 8.518074e+11

对于国家A等等。我知道如何手动获取此值:

maxA = max(("df1", df1["A"]), ("df2", df2["A"]))

maxA
("df1", 8.518074e+11)

但是如果我这样做的话,我需要用“B”,“C”来交换例子中的“A”作为所有变量。如何自动完成?我需要用这样的占位符替换有问题的变量:

maxX = max(("df1", df1["X"]), ("df2", df2["X"]))

然后在数据帧上重复,得到每个国家的结果。然而,这不同于在简单的列表上重复,因为只有一个特定的变量应该改变。有没有一个方便的解决办法,而不是用手来做呢?你知道吗

非常感谢


Tags: 数据目标列表value手动国家类别country
1条回答
网友
1楼 · 发布于 2024-05-06 19:10:46

首先,将country设置为每个数据帧的索引。你知道吗

df_list = [df1, df2, ...]
for i, df in enumerate(df_list):
     df_list[i] = df.set_index('country')

接下来,按轴连接它们,沿每行找到max,并重置索引。你知道吗

df = pd.concat(df_list, axis=1)\
       .max(axis=1)\
       .to_frame('max_value')\
       .reset_index()

df

  country     max_value
0       A  8.518074e+11
1       B  1.138434e+11
2       C  8.745698e+10
3       D  7.543453e+10
4       E  6.387533e+10

如果您想在结果中添加一个指示符,则需要稍微修改代码,添加一个新的indicator列,然后沿第0轴执行concat启用,并找到每个组的idxmax

df_list = [df1, df2, ...]
for i, df in enumerate(df_list):
     df_list[i] = df.assign(indicator=i + 1)

df = pd.concat(df_list, ignore_index=True)
df.loc[df.groupby('country')['value'].idxmax().values]

df

  country         value  indicator
0       A  8.518074e+11          1
1       B  1.138434e+11          1
2       C  8.745698e+10          1
3       D  7.543453e+10          1
4       E  6.387533e+10          1

相关问题 更多 >