我想通过部分子字符串对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 with:
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
现在我想做的是只对包含子字符串'my'的字符串进行分组,在这种情况下只避免使用颜色Key,创建一个带有所需子字符串的新列。 预期结果如下:
Key 'our'
GridCode
1000 2
1001 2
1002 1
1003 0
1004 1
我还尝试使用masked = df['Key'].str.contains('our')
,然后df1 = df[mask]
屏蔽DataFrame,但我无法弄清楚如何使用新的groupby计数创建新列。任何帮助都会非常感激。
答案 0 :(得分:2)
>>> 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'])