Python 计算某一行的出现频率
假设我有一个数据框,其中有3列作为Python 计算某一行的出现频率,python,pandas,Python,Pandas,假设我有一个数据框,其中有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
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
这里有一个黑客可以帮你找到答案。我觉得需要一种更直接的方式
df['times'] = 1
df.groupby(['Date', 'Amount', 'Type'], as_index=False).sum()
编辑:
找到第二个解决方案(您需要重命名列
df.groupby(['date','type']).amount.value_counts().reset_index()
这里有一个黑客可以帮你找到答案。不过我觉得需要一个更直接的方法
df['times'] = 1
df.groupby(['Date', 'Amount', 'Type'], as_index=False).sum()
编辑:
找到第二个解决方案(您需要重命名列
df.groupby(['date','type']).amount.value_counts().reset_index()
或者你可以使用
如果传递了dict,则将使用键来命名列。否则将使用函数名(存储在函数对象中)
或者你可以使用
如果传递了dict,则将使用键来命名列。否则将使用函数名(存储在函数对象中)
你尝试过任何解决方案吗?我能做到吗?=是的。你尝试过什么?@NagarajTantri我只知道如何计算某个值出现的频率,但这不是我想要的。@xzt不是问题,始终显示你尝试过什么来解决问题。因为,基本上是关于,
你尝试过它,但需要一些帮助获得众目睽睽@NagarajTantri刚刚把它添加到问题中。你有没有尝试过任何解决方案?我有什么办法可以做到吗?=是的。你尝试过什么?@NagarajTantri我只知道如何计算某个值出现的频率,但这不是我想要的。@xzt不是问题,始终显示你试图得到的结果注意。因为,SO基本上是关于,你尝试了一下,但是需要一些帮助来获得靶心。NagarajTantri刚刚把它添加到问题中。也许更好的方法是使用df.groupby(['date','amount','type']).size().reset_index(name='times')
或df.groupby(['date','amount','type'],sort=False).size().size().reset_index(name='times')
谢谢!我想知道是否还有其他方法可以在直方图中显示结果?我尝试使用.plot(kind='hist'),但绘图看起来是有线的。