Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算某一行的出现频率_Python_Pandas - Fatal编程技术网

Python 计算某一行的出现频率

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

假设我有一个数据框,其中有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

这里有一个黑客可以帮你找到答案。我觉得需要一种更直接的方式

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'),但绘图看起来是有线的。