【问题标题】:Count column B value_counts for same values in column A计算 A 列中相同值的 B 列 value_counts
【发布时间】:2020-12-20 00:22:33
【问题描述】:

对于下面的输入数据框,我们要创建两列,A_count 和 B_count。

有一个输入变量称为around_row_num。 IE。对于around_row_num=2,我们要查看当前行之前的2行和之后的2行,并计算与当前行具有相同'ID'的'Label'列中'A'的出现次数。

输入:

import pandas as pd

df = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2],'Label': ['A', 'A', 'B', 'B', 'A', 'B']})
    
   ID Label
0   1     A
1   1     A
2   1     B
3   1     B
4   2     A
5   2     B

around_row_num=2 的输出:

        ID  Label A_count B_count 
        1   A     2        1
        1   A     2        1
        1   B     1        2
        1   B     0        2        
        2   A     1        1
        2   B     1        1       

谢谢!

【问题讨论】:

  • ID = 1 和 Label = 'B' 的输出不正确,第一个 B 在 2 个空格内有两个 A,第二个 B 有 1 个

标签: python numpy dataframe functional-programming data-science


【解决方案1】:

从 ID 组更新到帐户:

df.set_index([df['ID'], 'Label'], append=True)['ID'].unstack()\
  .groupby('ID', as_index=False, group_keys=False)\
  .rolling(3, center=True).count()

输出:

Label    A    B
  ID           
0 1    2.0  0.0
1 1    2.0  1.0
2 1    1.0  2.0
3 1    0.0  2.0
4 2    1.0  1.0
5 2    1.0  1.0

试试这个:

df.set_index('Label', append=True)['ID'].unstack().rolling(3, center=True).count()

输出:

Label    A    B
0      2.0  0.0
1      2.0  1.0
2      1.0  2.0
3      1.0  2.0
4      1.0  2.0
5      1.0  1.0

【讨论】:

  • 太棒了斯科特。你很棒!感谢您的帮助。
  • 实际上 Scott 这个解决方案很棒,但是当 ID 更改值时它不会分离。如果一行的 ID = 1,而下一行的 ID=2,它仍然会查看下一行的滚动计数。你对此有什么建议吗?谢谢。
  • 你是对的。是的,我愿意。给我几分钟。
  • 太棒了斯科特。太感谢了!你怎么这么好人?有没有熊猫课或其他东西可以让熊猫变得更好?再次感谢!
  • boPeng 是的。有。我推荐@TedPetrou dunderdata
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
相关资源
最近更新 更多