【问题标题】:pandas: count string criteria across down rows熊猫:计算向下行的字符串标准
【发布时间】:2014-08-06 10:34:12
【问题描述】:

我有一个看起来像这样的数据框:

  col_1
0  A
1  A:C:D
2  A:B:C:D:E
3  B:D

我正在尝试计算每个 ':' 以到达:

  col_1        count
0  A             0
1  A:C:D         2
2  A:B:C:D:E     4
3  B:D           1

我尝试过应用一个函数无济于事:

def count_fx(df):
    return df.str.contains(':').sum()
df['count'] = df['col_1'].apply(count_fx)

还有,

df['count'] = df['col_1'].apply(lambda x: (x.str.contains(':')).sum(), axis=1)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你需要使用str.count方法:

    df['count'] = df[0].apply(lambda x: x.count(':'))
    
               0  count
    0      A:C:D      2
    1  A:B:C:D:E      4
    2        B:D      1
    

    【讨论】:

    • 为什么不使用内置的字符串方法,而不是应用。 df[0].str.count(':')
    • 我得到一个断言错误:AssertionError: Level : must be same as name (None)
    • @chrisb 使用该函数实际上比使用 apply 慢(见我的回答)。
    【解决方案2】:

    你在这里使用apply()的方式会导致每个元素都被传入。即DataFrame 不是传入的。所以你只需要将你的函数更改为

    def count_fx(s):
        return s.count(':')
    

    然后你可以使用你所拥有的:

    In [11]: df['count'] = df['col_1'].apply(count_fx)
    
    In [12]: df
    Out[12]:
           col_1  count
    0          A      0
    1      A:C:D      2
    2  A:B:C:D:E      4
    3        B:D      1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2021-12-15
      • 2022-01-24
      • 2021-06-03
      • 1970-01-01
      相关资源
      最近更新 更多