pandas:将一列列表聚合成一个列表

Eda*_*ame 3 aggregate dataframe python-3.x pandas

我有以下数据框my_df

name         numbers
----------------------
A             [4,6]
B             [3,7,1,3]
C             [2,5]
D             [1,2,3]
Run Code Online (Sandbox Code Playgroud)

我想将所有数字合并到一个新列表中,因此输出应该是:

 new_numbers
---------------
[4,6,3,7,1,3,2,5,1,2,3]
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def combine_list(my_lists):
    new_list = []
    for x in my_lists:
        new_list.append(x)

    return new_list

new_df = my_df.agg({'numbers': combine_list})
Run Code Online (Sandbox Code Playgroud)

new_df看起来仍然和原来的一样:

              numbers
----------------------
0             [4,6]
1             [3,7,1,3]
2             [2,5]
3             [1,2,3]
Run Code Online (Sandbox Code Playgroud)

我做错了什么?我该如何制作new_df

 new_numbers
---------------
[4,6,3,7,1,3,2,5,1,2,3]
Run Code Online (Sandbox Code Playgroud)

谢谢!

jez*_*ael 5

您需要展平值,然后Dataframe通过构造函数创建新值:

flatten = [item for sublist in df['numbers'] for item in sublist]
Run Code Online (Sandbox Code Playgroud)

或者:

flatten = np.concatenate(df['numbers'].values).tolist()
Run Code Online (Sandbox Code Playgroud)

或者:

from  itertools import chain

flatten = list(chain.from_iterable(df['numbers'].values.tolist()))
Run Code Online (Sandbox Code Playgroud)
df1 = pd.DataFrame({'numbers':[flatten]})
Run Code Online (Sandbox Code Playgroud)
print (df1)
                             numbers
0  [4, 6, 3, 7, 1, 3, 2, 5, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

时间安排这里