PythonPandas:pivot_表计数,用于同一级别上的多个列?
我有一个熊猫数据框,具有以下总体布局(虚拟数据): 我可以用以下布局轻松创建pivot_表:PythonPandas:pivot_表计数,用于同一级别上的多个列?,python,pandas,numpy,pivot-table,Python,Pandas,Numpy,Pivot Table,我有一个熊猫数据框,具有以下总体布局(虚拟数据): 我可以用以下布局轻松创建pivot_表: prod_id -> ind_1 ind_2 (n)(%)(n)(%) loc | V 但是,我尝试在与“ind_1或ind_2”相同的级别上包含“ind_any”的额外计数,如下所示: prod_id -> ind_1 ind_2 ind_any (n)(%)(n)(%)(n) loc | V 不幸的是,我不能将单独完成的结果连接在一起,因为它们需要为最终输出正确排序。
prod_id ->
ind_1 ind_2
(n)(%)(n)(%)
loc
|
V
但是,我尝试在与“ind_1或ind_2”相同的级别上包含“ind_any”的额外计数,如下所示:
prod_id ->
ind_1 ind_2 ind_any
(n)(%)(n)(%)(n)
loc
|
V
不幸的是,我不能将单独完成的结果连接在一起,因为它们需要为最终输出正确排序。任何提示或技巧都将不胜感激
编辑:
trans_id
prod_id thing_1 thing_2 thing_3
ind ind_1 ind_any ind_1 ind_2 ind_any ind_2 ind_any
loc
place_1 2.0 2.0 1.0 0.0 1.0 0.0 0.0
place_2 0.0 0.0 0.0 0.0 0.0 1.0 1.0
place_3 0.0 0.0 0.0 1.0 1.0 0.0 0.0
以下是我希望使用虚拟数据的理想输出格式:
trans_id,prod_id,loc,ind_1 or ind_2,ind_any
1,thing_1,place_1,ind_1,ind_any
2,thing_3,place_2,ind_2,ind_any
3,thing_2,place_1,ind_1,ind_any
4,thing_1,place_1,ind_1,ind_any
5,thing_2,place_3,ind_2,ind_any
thing_1 thing_2 thing_3
ind_1 ind_2 ind_any ind_1 ind_2 ind_any ind_1 ind_2 ind_any
(n)(%)(n)(%)(n) (n)(%)(n)(%)(n) (n)(%)(n)(%)(n)
place_1
place_2
place_3
我将根据虚拟数据调整实际代码,并在有机会时提供
import numpy as np
import pandas as pd
raw = ['trans_id', 'prod_id', 'loc', 'ind_1 or ind_2', 'ind_any',
'1', 'thing_1', 'place_1', 'ind_1', 'ind_any',
'2', 'thing_3', 'place_2', 'ind_2', 'ind_any',
'3', 'thing_2', 'place_1', 'ind_1', 'ind_any',
'4', 'thing_1', 'place_1', 'ind_1', 'ind_any',
'5', 'thing_2', 'place_3', 'ind_2', 'ind_any']
raw = np.asarray(raw).reshape(6,5)
df = pd.DataFrame(raw[1:, :], columns=[raw[0,:]])
df2 = pd.concat([df.loc[:,['trans_id', 'prod_id', 'loc', 'ind_1 or ind_2']].rename(columns={'ind_1 or ind_2':'ind'}),
df.loc[:,['trans_id', 'prod_id', 'loc', 'ind_any']].rename(columns={'ind_any':'ind'})])
df3 = (df2.loc[:,['prod_id', 'loc', 'ind','trans_id']]
.groupby(['loc', 'prod_id', 'ind'])
.count()
.unstack(level=[1,2])
.fillna(0)
.sort_index(axis=1))
print df3
输出:
trans_id
prod_id thing_1 thing_2 thing_3
ind ind_1 ind_any ind_1 ind_2 ind_any ind_2 ind_any
loc
place_1 2.0 2.0 1.0 0.0 1.0 0.0 0.0
place_2 0.0 0.0 0.0 0.0 0.0 1.0 1.0
place_3 0.0 0.0 0.0 1.0 1.0 0.0 0.0
向我们显示您的代码,或者您期望的代码output@Wen我已经添加了预期的输出,并将在有机会时为虚拟数据添加适应的代码。谢谢你为什么不能,你的索引是loc,这正是concat的问题。不幸的是,我必须有“ind_1,ind_2,ind_any”的确切顺序。结果太大,无法手动修复输出。带有“place_1”、“thing1”和“ind1”的条目重复。你希望如何解决这个问题?如果我理解正确,您希望trans_id是所需输出中的值?有没有简单的方法来添加百分比?