假设我有一个包含3列的数据框
date amount type
0 20160101 50 apple
1 20160101 50 apple
2 20160101 50 banana
3 20160102 30 apple
4 20160102 50 apple
5 20160102 40 banana
6 20160102 40 banana
我想要做的是使用所有列来计算行出现的频率,结果应该类似于
date amount type times
20160101 50 apple 2
20160101 50 banana 1
20160102 30 apple 1
20160102 50 apple 1
20160102 40 banana 2
我的代码就像
df
Out[23]:
Date Amount Type
0 20160101 50 apple
1 20160101 50 apple
2 20160101 50 banana
3 20160102 30 apple
4 20160102 50 apple
5 20160102 40 banana
6 20160102 40 banana
P=df.pivot_table('Amount','Date','Type')
P
Out[27]:
Type apple banana
Date
20160101 50 50
20160102 40 40
答案 0 :(得分:1)
这是一个可以帮助你解决问题的黑客攻击。我觉得需要更直接的方式
df['times'] = 1
df.groupby(['Date', 'Amount', 'Type'], as_index=False).sum()
编辑:
找到第二个解决方案(您需要重命名列
df.groupby(['date','type']).amount.value_counts().reset_index()
答案 1 :(得分:1)
>>> df.groupby(['date', 'amount', 'type']).size().reset_index()
date amount type 0
0 20160101 50 apple 2
1 20160101 50 banana 1
2 20160102 30 apple 1
3 20160102 40 banana 2
4 20160102 50 apple 1
或者您可以使用agg
。
如果传递了dict,则键将用于命名列。否则将使用函数的名称(存储在函数对象中)。
df.groupby(['date', 'amount', 'type']).type.agg({'times': 'size'}).reset_index()
date amount type times
0 20160101 50 apple 2
1 20160101 50 banana 1
2 20160102 30 apple 1
3 20160102 40 banana 2
4 20160102 50 apple 1