我试图扩展(不确定它是否是正确的词)某些分类 使用pandas将数据分成列。
我们说我有以下数据框:
df = pandas.DataFrame({'name': ['john', 'john', 'louis', 'louis'],
'day':['a', 'b', 'a', 'b'], 'oranges':[10, 23, 15, 5],
'apple': [5, 4, 1, 3]})
生成此表:
apple day name oranges
0 5 a john 10
1 4 b john 23
2 1 a louis 15
3 3 b louis 5
我想使用一些pandas方法来生成这样的表:
apple_a apple_b name oranges_a oranges_b
0 5 4 john 10 23
1 1 3 louis 15 5
到目前为止,我已尝试过:
df.pivot('name', columns='day')
apple oranges
day a b a b
name
john 5 4 10 23
louis 1 3 15 5
我的问题是:如何使用Pandas基于分类信息拆分数据并创建更多列?
提前致谢,
Rhenan
答案 0 :(得分:2)
让我们尝试使用set_index
,stack
,unstack
,然后使用map
和join
将多索引列映射到单元格级别:< / p>
df.set_index(['name','day']).stack().unstack([2,1])
df_1.columns = df_1.columns.map('_'.join)
print(df_1)
输出:
apple_a oranges_a apple_b oranges_b
name
john 5 10 4 23
louis 1 15 3 5
答案 1 :(得分:2)
您已经获得了所需的输出,您需要格式化列名称
df = df.pivot('name', columns='day')
df.columns = ['_'.join(col).strip() for col in df.columns.values]
df = df.reset_index()
name apple_a apple_b oranges_a oranges_b
0 john 5 4 10 23
1 louis 1 3 15 5
答案 2 :(得分:1)
n_df = df.pivot('name', columns='day')
n_df.columns = n_df.columns.map('_'.join)
输出:
apple_a apple_b oranges_a oranges_b
name
john 5 4 10 23
louis 1 3 15 5
再次感谢!