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

Python 使用特定的变化变量在数据帧上重复,python,pandas,Python,Pandas,我有许多看起来类似于以下内容的数据帧: 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.86

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

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"]))
然后在数据帧上重复,以获得每个国家的结果。然而,这不同于在简单的列表上重复,因为只有一个特定的变量应该改变。有没有一个方便的解决方法,而不是手工操作


非常感谢

首先,将
国家
设置为每个数据帧的索引

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

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

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


谢谢,但是当我尝试应用它时,我得到了以下错误:
'Series'对象没有属性“set\u index”
。错误指向第三行(set_index函数)@palacinak ok。在你的问题中,你说我有许多数据帧,现在你声称它们是系列的。我应该相信它们是什么?@COLDSPEED hm它不起作用,但给了我更多的列(“索引”、“指标”和“级别0”,具有不同的值)。我认为只需要另一列来指示从哪个数据帧提取max_值(代码中的指示符列没有做什么,对吗?@palacinak这就是
指示符
列所做的-它告诉您max是否来自df_i,其中
i
是1,2,3。。。。N请确保已将序列转换为数据帧。
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