猿问

根据列后缀对列重新排序

这是我的代码:

all_data = pd.merge(all_data, meanData, suffixes=["", "_mean"], how='left', on=['id', 'id2'])

现在,我想合并all_dataand meanData,但我希望 meanData 列首先出现。

像这样:

a_mean,b_mean,c_mean,a,b,c

不是这样

a,b,c,a_mean,b_mean,c_mean

注意:我有很多列,所以我不想手动编写代码来更改索引。

示例代码(您可以复制):

import pandas

df = pd.DataFrame([[0,1, 2], [0,1, 3], [0,4, 6],[1,3,4],[1,4,2]], columns=['id','A', 'B'])

features = ['A','B']

meanData = df.groupby(['id'])[features].agg('mean')

df = pd.merge(df, meanData, suffixes=["", "_mean"], how='left', on=['id'])

print(df.columns)

输出

索引(['id', 'A', 'B', 'A_mean', 'B_mean'], dtype='object')

预期输出:

索引(['A_mean', 'B_mean','id', 'A', 'B'], dtype='object')


三国纷争
浏览 164回答 2
2回答

海绵宝宝撒

我认为您可以使用transformaftergroupby来获取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  B0     2.0  3.666667   0  1  21     2.0  3.666667   0  1  32     2.0  3.666667   0  4  63     3.5  3.000000   1  3  44     3.5  3.000000   1  4  2

达令说

您可以使用以下命令合并和重新排序列sorted():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  B0     2.0  3.666667   0  1  21     2.0  3.666667   0  1  32     2.0  3.666667   0  4  63     3.5  3.000000   1  3  44     3.5  3.000000   1  4  2
随时随地看视频慕课网APP

相关分类

Python
我要回答