Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用groupby函数时如何将元素粘合到列表中?_Python_Pandas - Fatal编程技术网

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

Python 使用groupby函数时如何将元素粘合到列表中?,python,pandas,Python,Pandas,我有一个数据帧: 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

我有一个数据帧:

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]
我自己写了一些东西,但不起作用。它将返回原始数据帧:

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

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

如何实现我想要的功能?

一个简单的方法是

df = df.set_index('A')
a = df.groupby(level=0).apply(lambda x: x['C'].values)
a现在看起来像什么

A
bar          [2, 4, 6]
foo    [1, 3, 5, 7, 8]
您可以通过

a['bar']
Out[235]: array([2, 4, 6])
这就可以了,使用.agg:

我认为df.groupby'A.C.agglist也应该起作用。但显然不会

如果要使用“应用”,可以这样做,但会丢失列名:

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]
将结果转换为系列至关重要,否则您将获得:

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

非常感谢你。除了“C”之外,我还有不止一列,这就是我定义我的函数的原因。谢谢你的回答。实际上,我有不止一列要聚合。4.您尝试过df.groupby'A.吗?aggrembda x:listxIt很有效,谢谢。如果你能告诉我这段看似无辜的代码出了什么问题,那就太好了:请参见编辑,如果你想使用apply,可以这样做,但你会丢失列名。基本上,apply函数应该返回一系列3的长度,比较两个新编辑。df.groupby'a'。agglist不起作用,我记得有一些~~参数~~讨论agg应该与列表一起工作。。。我想现在好多了。
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