Python 使用max()创建df,并在相邻列中添加相应的值
我已经合并了2个数据帧,如图所示 输入: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
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 looksprint(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