Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据列后缀对列重新排序_Python_Pandas - Fatal编程技术网

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您是使用dataframe
meanData
来做其他用途,还是只是在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