有问题将python数据帧汇总到每条记录一行

时间:2016-09-06 18:36:17

标签: python pandas dataframe pivot-table

我的表格中有一个数据框:

df = pd.DataFrame({'id':['a', 'a', 'a', 'b','b'],'var':[1,2,3,5,9]})

我尝试重新塑造它,以便每个' id'和价值观' var'在一行中显示,因此' a'会有1,2,3 ...' b'会有' 5,9'

我试过了:

test = pd.crosstab(df.id, df.var)  # but it does not work?

如果有人可以帮助我,我们将不胜感激

编辑,我将所需的结果作为图片enter image description here

附上

2 个答案:

答案 0 :(得分:3)

您必须提供正确的参数,例如:

pd.crosstab(index=df['id'], columns=df['var'])

var  1  2  3  5  9
id                
a    1  1  1  0  0
b    0  0  0  1  1

答案 1 :(得分:2)

<强>更新

In [32]: df.groupby('id')['var'].apply(lambda x: x.astype(str).str.cat(sep=',')).reset_index()
Out[32]:
  id    var
0  a  1,2,3
1  b    5,9

或将var作为列表:

In [29]: df.groupby('id')['var'].apply(list).reset_index()
Out[29]:
  id        var
0  a  [1, 2, 3]
1  b     [5, 9]

OLD回答:

IIUC您可以使用内部pivot_table()方法使用的crosstab()吗?

In [26]: df.pivot_table(index='id', columns='var', aggfunc='size', fill_value=0)
Out[26]:
var  1  2  3  5  9
id
a    1  1  1  0  0
b    0  0  0  1  1