【问题标题】:pandas - groupby by partial stringpandas - 按部分字符串分组
【发布时间】:2015-02-13 09:06:11
【问题描述】:

我想按部分子字符串对 DataFrame 进行分组。这是一个示例 .csv 文件:

GridCode,Key
1000,Colour
1000,Colours
1001,Behaviours
1001,Behaviour
1002,Favourite
1003,COLORS
1004,Honours

到目前为止,我所做的是将文件导入为df = pd.read_csv(sample.csv),然后将所有字符串用df['Key'] = df['Key'].str.lower() 转为小写。我尝试的第一件事是通过 GridCode 和 Key 进行分组:

g = df.groupby([df['GridCode'],df['Key']]).size()

然后取消堆叠并填充:

d = g.unstack().fillna(0)

得到的DataFrame是:

Key       behaviour  behaviours  colors  colour  colours  favourite  honours
GridCode                                                                    
1000              0           0       0       1        1          0        0
1001              1           1       0       0        0          0        0
1002              0           0       0       0        0          1        0
1003              0           0       1       0        0          0        0
1004              0           0       0       0        0          0        1

现在我想做的是只对包含子字符串'our'的字符串进行分组,在这种情况下,只避免颜色键,使用所需的子字符串创建一个新列。 预期的结果是:

Key       'our'
GridCode                                                                    
1000        2              
1001        2
1002        1
1003        0
1004        1

我还尝试使用masked = df['Key'].str.contains('our') 屏蔽DataFrame,然后使用df1 = df[mask],但我不知道如何使用新的groupby 计数创建一个新列。任何帮助将不胜感激。

【问题讨论】:

    标签: python string pandas


    【解决方案1】:
    >>> import re  # for the re.IGNORECASE flag
    >>> df['Key'].str.contains('our', re.IGNORECASE).groupby(df['GridCode']).sum()
    GridCode
    1000        2
    1001        2
    1002        1
    1003        0
    1004        1
    Name: Key, dtype: float64
    

    也,而不是

    df.groupby([df['GridCode'],df['Key']])
    

    最好这样做:

    df.groupby(['GridCode', 'Key'])
    

    【讨论】:

    • .str.contains 具有 case 参数,这似乎完全符合 re.IGNORECASE 应该做的事情。所以这也应该有效:df['Key'].str.contains('our', case=False)
    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2013-10-11
    • 2012-07-15
    • 2018-04-09
    相关资源
    最近更新 更多