Python 使用max()创建df,并在相邻列中添加相应的值

Python 使用max()创建df,并在相邻列中添加相应的值,python,pandas,Python,Pandas,我已经合并了2个数据帧,如图所示 输入: df1 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1':[76,23,43,34,0,78,34],'value2':[1,45,8,0,76,45,56]}) df2 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1_pair':[0,0,0,0,180,180,90],'value2_pair':[0,0,0,0,90,180,90]}) 输出:df

我已经合并了2个数据帧,如图所示

输入:

df1 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1':[76,23,43,34,0,78,34],'value2':[1,45,8,0,76,45,56]})
df2 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1_pair':[0,0,0,0,180,180,90],'value2_pair':[0,0,0,0,90,180,90]})
输出:
df=df1.merge(df2,on='ref')

输出:
df['value1'].max()

但是,这仅适用于列
value1
。如何对
value2
列重复此操作(我的实际df将有许多列),然后将其相应的值对组合成新的df

期望输出:

 ref            12   10
value1          78   76    
value1_pair     180  90

如果有许多对
valueN\u x
valueN-y
可以将
ref
转换为索引,然后按
\uu
拆分列,按重塑形状,并通过以下方式获得具有最大
v
的行:


编辑:对于排序列,通过
argsort()
,提取数字并获取排序值的位置:


你能解释一下那些专栏是什么吗?嗨@jezrael:谢谢你。我将调查这一点,看看它是否在我真正的df工作@user9106985-真实df中
merge
之后的
print(df.columns)
是什么?我认为print太大,无法放在这里的注释中,但它基本上是53列,第一列是“ref”,第一组是26列的'value',我们应用idxmax第三组是26列的对应对我得到一个错误:KeyError:'Column not found:v'How looks
print(df.columns.tolist()[:3])
df.columns=df.columns.str.split(''ux',expand=True)?@user9106985-answe被编辑-也输入数据。现在它更简单了,因为删除了
rename
78
 ref            12   10
value1          78   76    
value1_pair     180  90
df1 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1_x':[76,23,43,34,0,78,34],'value2_x':[1,45,8,0,76,45,56]})
df2 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1_y':[0,0,0,0,180,180,90],'value2_y':[0,0,0,0,90,180,90]})

df=df1.merge(df2, on='ref')
print (df)
   ref  value1_x  value2_x  value1_y  value2_y
0    2        76         1         0         0
1    4        23        45         0         0
2    6        43         8         0         0
3    8        34         0         0         0
4   10         0        76       180        90
5   12        78        45       180       180
6   14        34        56        90        90
df = df.set_index('ref')
df.columns = df.columns.str.split('_', expand=True)

print(df.columns.levels[1])
#Index(['x', 'y'], dtype='object')

df = df.stack(0)
df = df.loc[df.groupby(level=1)['x'].idxmax()].reset_index(level=0).T
print (df)
#      value1  value2
# ref      12      10
# x        78      76
# y       180      90
df = pd.DataFrame({
        'M1':list('abcdef'),
         'M10':[4,5,4,5,5,4],
         'M2':[7,8,9,4,2,3],
         'M3':[1,3,5,7,1,0],
         'M11':[5,3,6,9,2,4],
         'M4':list('aaabbb')
})

df =df.iloc[:, df.columns.str.extract('(\d+)', expand=False).astype(int).argsort()]
print (df)
  M1  M2  M3 M4  M10  M11
0  a   7   1  a    4    5
1  b   8   3  a    5    3
2  c   9   5  a    4    6
3  d   4   7  b    5    9
4  e   2   1  b    5    2
5  f   3   0  b    4    4