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