获取CSV内两列内的出现次数

时间:2018-07-13 07:47:26

标签: python pandas csv pd

你好,我在csv中有以下数据集:

Group           Size     Some_other_column1      Some_other_column2

Short          Small            blabla1                     blabla6    
Moderate       Medium           babla3                      blabla8
Short          Small            blabla2                     blabla7
Moderate       Small            blabla4                     blabla9
Tall           Large            blabla5                     blabla10
Short          Medium           blabla11                    blabla12

我想使用python代码获得以下结果:

Group           Size      Count     Some_other_column1      Some_other_column2

Short          Small       2            blabla1                     blabla6
Moderate       Medium      1            babla3                      blabla8
Short          Small       2            blabla2                     blabla7
Moderate       Small       1            blabla4                     blabla9
Tall           Large       1            blabla5                     blabla10
Short          Medium      1            blabla11                    blabla12

基本上,我需要计算组大小对的数量,并为此创建一个新列,即“ Count”,其他所有列保持相同。 我可以使用熊猫或任何可以帮助您的东西。

作为参考,关于此主题还有另一个问题,但是由于我需要保留多列,因此它不能解决我的问题: Python: get a frequency count based on two columns (variables) in pandas dataframe

这里还有另一个主题: How to assign a name to the a size() column? 但这也不能回答我的问题,因为我不想再通过应用上述链接中描述的方法而直接删除另外2列(“其他column1 / 2”)。同样,同样重要的是,我不想合并对,我需要保留所有对,因为它们在Some_other_column1 / 2上具有不同的值。

1 个答案:

答案 0 :(得分:0)

您需要insertsize中的GroupBy.transform

df.insert(2, 'Count', df.groupby(['Group','Size'])['Size'].transform('size'))
print (df)
      Group    Size  Count Some_other_column1 Some_other_column2
0     Short   Small      2            blabla1            blabla6
1  Moderate  Medium      1             babla3            blabla8
2     Short   Small      2            blabla2            blabla7
3  Moderate   Small      1            blabla4            blabla9
4      Tall   Large      1            blabla5           blabla10
5     Short  Medium      1           blabla11           blabla12