pandas groupby字符串列表

时间:2016-10-07 00:26:08

标签: python pandas data-analysis

想象一下,如果你有一个字符串列表和一个带有Foo列的pandas数据框,其中包含可能包含这些字符串的单词:

my_list = ['A', 'B', 'C']

df [' Foo']的字词包含' A'或者' B'或者' C',

您可以提取df.Foo.str.contains(my_list[0])等包含的内容,但是您可以按列表匹配的行进行分组吗?所以groupby将由contains' A'或者' B'或者' C'

1 个答案:

答案 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中的第一个项目