Python 根据列后缀对列重新排序
这是我的代码:Python 根据列后缀对列重新排序,python,pandas,Python,Pandas,这是我的代码: all_data = pd.merge(all_data, meanData, suffixes=["", "_mean"], how='left', on=['id', 'id2']) 现在,我想合并所有_数据和平均数据,但我想先显示平均数据列 像这样: a_的意思是,b_的意思是,c_的意思是,a,b,c 不是这样的 a、 b,c,a_是指,b_是指,c_是指 注意:我有很多列,所以我不想手动编写代码来更改索引 示例代码(您可以复制): 输出 索引(['id','A','B
all_data = pd.merge(all_data, meanData, suffixes=["", "_mean"], how='left', on=['id', 'id2'])
现在,我想合并所有_数据
和平均数据
,但我想先显示平均数据列
像这样:
a_的意思是,b_的意思是,c_的意思是,a,b,c
不是这样的
a、 b,c,a_是指,b_是指,c_是指
注意:我有很多列,所以我不想手动编写代码来更改索引
示例代码(您可以复制):
输出
索引(['id','A','B','A_-mean','B_-mean'],dtype='object')
预期产出:
索引(['A_-mean','B_-mean','id','A','B'],dtype='object')
我认为您可以在groupby
之后使用,以获得与每行相关的mean
,然后pd.concat
数据帧,例如:
new_df = pd.concat([(df.groupby('id')[features]
.transform(np.mean).add_suffix('_mean')), df],
axis=1)
print (new_df)
A_mean B_mean id A B
0 2.0 3.666667 0 1 2
1 2.0 3.666667 0 1 3
2 2.0 3.666667 0 4 6
3 3.5 3.000000 1 3 4
4 3.5 3.000000 1 4 2
我认为您可以在groupby
之后使用,以获得与每行相关的mean
,然后pd.concat
数据帧,例如:
new_df = pd.concat([(df.groupby('id')[features]
.transform(np.mean).add_suffix('_mean')), df],
axis=1)
print (new_df)
A_mean B_mean id A B
0 2.0 3.666667 0 1 2
1 2.0 3.666667 0 1 3
2 2.0 3.666667 0 4 6
3 3.5 3.000000 1 3 4
4 3.5 3.000000 1 4 2
您可以使用
sorted()
对列进行合并和重新排序:
您可以使用
sorted()
对列进行合并和重新排序:
对不起,我的意思是
pd.merge(meanData,all_data,后缀=[“_-mean”,”“],how='right',on=['id',id2'])
Same result@coldspeed:/您能提供一个包含一些文本数据和编辑到您的问题中的预期输出的示例吗?我会重新打开你的帖子,一旦它是明确的,你已经尝试和什么没有工作。完成@coldspeed@JohnDoe您是将数据框meanData
用于其他用途,还是只是在原始数据框df
中添加列“\u mean”?对不起,我的意思是pd.merge(meanData,所有\u数据,后缀=[“\u mean”,”“],how='right',on=['id','id2'])
Same result@coldspeed:/您能提供一个文本形式的数据和编辑到您的问题中的预期输出吗?一旦清楚您尝试了什么和哪些不起作用,我将重新打开您的帖子。完成@coldspeed@JohnDoe您是使用dataframemeanData
来做其他用途,还是只是在yo中添加列“_mean”您的原始数据帧df
?很抱歉之前没有提到这一点,但我使用mean
作为meanRank
的另一个名称,即'meanDataRank=mean.groupby('id')[features].rank(pct=True).reset_index()`@JohnDoe我假设mean
就是你在你的问题中所说的meanData
。如果是这样,我不认为使用groupby
有什么意义,因为meanData每个id只有一行,不是吗?或者你想在每个id组中对值进行排序吗?id不是唯一的。是的,我想用mean-dataframe计算meanRank。对不起,不是我之前没有提到这一点,但我对meanRank
也使用了meanDataRank=mean.groupby('id')[features].rank(pct=True).reset_index()`@约翰多:我假设mean
就是你在问题中所说的meanData
。如果是这样,我不认为使用groupby
有什么意义,因为meanData每个id只有一行,不是吗?或者你想在每个id组中对值进行排序吗?id不是唯一的。是的,我想用mean-dataframe计算meanRank。
v = pd.merge(df, meanData, suffixes=["", "_mean"], how='left', on=['id'])
v[sorted(v.columns, key=lambda x: 'mean' not in x)]
A_mean B_mean id A B
0 2.0 3.666667 0 1 2
1 2.0 3.666667 0 1 3
2 2.0 3.666667 0 4 6
3 3.5 3.000000 1 3 4
4 3.5 3.000000 1 4 2