使用groupby函数时如何将元素粘合到列表中?

2024-02-15

我有一个数据框:

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
                   'C' : np.asarray([1,2,3,4,5,6,7,8])
                   'D' : np.asarray([2,3,4,5,6,7,8,9])})

     A   C   D
 0  foo  1   2
 1  bar  2   3
 2  foo  3   4
 3  bar  4   5
 4  foo  5   6
 5  bar  6   7
 6  foo  7   8
 7  foo  8   9

我想要的是

    A   C                  D
 0 foo  [1,3,5,7,8]      [2,4,6,8,9]
 1 bar  [2,4,6]          [3,5,7]

我自己写了一些东西,但是不起作用。它给了我原始的 DataFrame:

def my_func(df):
    df.apply(lambda x: list(x.values), axis=0)
    return df

df = df.groupby(['A']).apply(my_func)
print df

我怎样才能实现我想要的功能?


这样就可以了,使用.agg():

In [15]:

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
                   'C' : np.asarray([1,2,3,4,5,6,7,8]),
                   'D' : np.asarray([2,3,4,5,6,7,8,9])})
In [16]:

print df.groupby('A').agg(lambda x: list(x))
                   C                D
A                                    
bar        [2, 4, 6]        [3, 5, 7]
foo  [1, 3, 5, 7, 8]  [2, 4, 6, 8, 9]

我以为df.groupby('A').C.agg(list)也应该有效。但显然不会。

如果你想使用apply这是可以完成的,但是您将丢失列名称:

In [35]:

print df.groupby('A').apply(lambda x: pd.Series(list(x.T.values)))
                             0                1                2
A                                                               
bar            [bar, bar, bar]        [2, 4, 6]        [3, 5, 7]
foo  [foo, foo, foo, foo, foo]  [1, 3, 5, 7, 8]  [2, 4, 6, 8, 9]

将结果投射到Series至关重要,否则你会得到:

In [36]:

print df.groupby('A').apply(lambda x: list(x.T.values))
A
bar              [[bar, bar, bar], [2, 4, 6], [3, 5, 7]]
foo    [[foo, foo, foo, foo, foo], [1, 3, 5, 7, 8], [...
dtype: object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用groupby函数时如何将元素粘合到列表中? 的相关文章