想象一下,如果你有一个字符串列表和一个带有Foo
列的pandas数据框,其中包含可能包含这些字符串的单词:
my_list = ['A', 'B', 'C']
df [' Foo']的字词包含' A'或者' B'或者' C',
您可以提取df.Foo.str.contains(my_list[0])
等包含的内容,但是您可以按列表匹配的行进行分组吗?所以groupby将由contains' A'或者' B'或者' C'
答案 0 :(得分:0)
是的,您可以通过将函数传递给groupby()
来完成此操作data = {'Foo': {0: 'apple',
1: 'body',
2: 'animal',
3: 'cot',
4: 'cord',
5: 'bed',
6: 'ant'}}
df = pd.DataFrame(data)
print (df)
Foo
0 apple
1 body
2 animal
3 cot
4 cord
5 bed
6 ant
将为df ['Foo']中的每个值调用get_grp()。注意:x只是df的索引,所以我们必须传递一些额外的东西
def get_grp(x, df, col_name, my_list):
for c in my_list:
if c in df[col_name][x]:
return c
my_list = ['a', 'b', 'c']
g = df.groupby(lambda x : get_grp(x, df, 'Foo', my_list))
print (type(g))
print (g.count())
<class 'pandas.core.groupby.DataFrameGroupBy'>
Foo
a 3
b 2
c 2
注意:get_grp()只返回my_list中的一项。所以'Ball'只会属于一个分组而且会是'a'因为它是我们检查的my_list中的第一个项目