Python 从Pandas中的Groupedby数据框创建列表

Python 从Pandas中的Groupedby数据框创建列表,python,pandas,list,pandas-groupby,Python,Pandas,List,Pandas Groupby,假设我的df如下所示: df = pd.DataFrame({'Order ID': [1, 1, 2, 3, 3, 3, 4, 4], 'Product': ['USB', 'Bat', 'Ball', 'USB', 'Phone', 'Toy', 'Bike', 'Apple']}) 我想按订单ID分组,然后根据订单ID的频率将产品值放入列表中- [['USB', 'Bat'], ['Ball'], ['USB', 'Phone', 'Toy'], ['Bike', 'Apple']]

假设我的df如下所示:

df = pd.DataFrame({'Order ID': [1, 1, 2, 3, 3, 3, 4, 4], 'Product': ['USB', 'Bat', 'Ball', 'USB', 'Phone', 'Toy', 'Bike', 'Apple']})
我想按订单ID分组,然后根据订单ID的频率将产品值放入列表中-

[['USB', 'Bat'], ['Ball'], ['USB', 'Phone', 'Toy'], ['Bike', 'Apple']]
[['USB', 'Bat'], ['Ball'], ['USB', 'Phone', 'Toy'], ['Bike', 'Apple']]
USB和Bat都具有相同的订单ID 1,因此它们位于相同的列表中

我的代码,试用版1:

combo_outer = []  # outer most list

grouped = df.groupby(['Order ID', 'Product'])

for group, frame in grouped:
    
    combo_inner = []    # for inner lists

    for row_index, row in frame.iterrows():
    
        combo_inner.append(row['Product'])
    
    combo_outer.extend(combo_inner)
试验2:

df['Product'].values.tolist()
在这两种情况下,我最终得到一个列表:

['Bat', 'USB', 'Ball', 'Phone', 'Toy', 'USB', 'Apple', 'Bike']

我做错了什么?

在试用版1中,应该使用append而不是extend。或者您可以使用列表理解:

[g.values.tolist() for _, g in df.Product.groupby(df['Order ID'])]
# [['USB', 'Bat'], ['Ball'], ['USB', 'Phone', 'Toy'], ['Bike', 'Apple']]

在试用版1中,应该使用append而不是extend。或者您可以使用列表理解:

[g.values.tolist() for _, g in df.Product.groupby(df['Order ID'])]
# [['USB', 'Bat'], ['Ball'], ['USB', 'Phone', 'Toy'], ['Bike', 'Apple']]

在第一次试用中,只需这样做:grouped=df.groupby['Order ID'],而不是grouped=df.groupby['Order ID','Product']

第二件事是,在最后一行中使用append而不是extend

线索一应该是这样的:

combo_outer = []  # outer most list

grouped = df.groupby(['Order ID'])

for group, frame in grouped:
    
    combo_inner = []    # for inner lists

    for row_index, row in frame.iterrows():
    
        combo_inner.append(row['Product'])
    
    combo_outer.append(combo_inner)


在第一次试用中,只需这样做:grouped=df.groupby['Order ID'],而不是grouped=df.groupby['Order ID','Product']

第二件事是,在最后一行中使用append而不是extend

线索一应该是这样的:

combo_outer = []  # outer most list

grouped = df.groupby(['Order ID'])

for group, frame in grouped:
    
    combo_inner = []    # for inner lists

    for row_index, row in frame.iterrows():
    
        combo_inner.append(row['Product'])
    
    combo_outer.append(combo_inner)


您可以使用agg将list函数直接发送到groupby并转换为list

df.Product.groupby(df['Order ID']).agg(list).tolist()
产出:


[['USB'、[Bat']、['Ball']、['USB'、[Phone'、[Toy']、['Bike'、[Apple']]

您可以使用agg将列表函数直接发送到组并转换为列表

df.Product.groupby(df['Order ID']).agg(list).tolist()
产出:


在试用版1中,您应该使用append,而不是extend。或者您可以使用如下所示的应用功能

df1['new']=df.groupby('Order ID')['Product'].apply(list)
df1['new'].values.tolist()
输出


在试用版1中,应该使用append而不是extend。或者您可以使用如下所示的应用功能

df1['new']=df.groupby('Order ID')['Product'].apply(list)
df1['new'].values.tolist()
输出