Pandas,在groupby之后创建列
Pandas, create columns after groupby
关于 Pandas DataFrame 'test_df':
id_customer id_order product_name
3 78 product1
3 79 product2
3 80 product3
7 100 product4
9 109 product5
在 'id_customer' 上进行分组后如何获得:
id_customer order_1 order_2 product_name_1 product_name_2
3 78 79 product1 product2
7 100 product4
9 109 product5
目标是在groupby之后检索2和每个'id_customer'匹配的行数之间的最小值,然后,如果可能的话,填写以上所有字段。
我从
开始
def order_to_col(my_dataframe_df,my_list):
for num in range(0,min(len(my_list),2)):
my_dataframe_df['order_'+str(num)] = my_list[num]
test_df = test_df.groupby('id_customer').apply(lambda x: order_to_col(test_df,list(x.id_order)))
但我确定这不是好方法
注意:我建议使用 head 来执行此操作,而不是使用多列:
In [11]: g = df.groupby('id_customer')
In [12]: g.head(2)
Out[12]:
id_customer id_order product_name
0 3 78 product1
1 3 79 product2
3 7 100 product4
4 9 109 product5
您可以使用 nth 组合第 0 和第 1,然后连接这些:
In [21]: g = df.groupby('id_customer')
In [22]: g[['id_order', 'product_name']].nth(0)
Out[22]:
id_order product_name
id_customer
3 78 product1
7 100 product4
9 109 product5
In [23]: g[['id_order', 'product_name']].nth(1)
Out[23]:
id_order product_name
id_customer
3 79 product2
In [24]: a = g[['id_order', 'product_name']].nth(0)
b = g[['id_order', 'product_name']].nth(1)
In [25]: pd.concat([a, b], axis=1)
Out[25]:
id_order product_name id_order product_name
id_customer
3 78 product1 79 product2
7 100 product4 NaN NaN
9 109 product5 NaN NaN
关于 Pandas DataFrame 'test_df':
id_customer id_order product_name
3 78 product1
3 79 product2
3 80 product3
7 100 product4
9 109 product5
在 'id_customer' 上进行分组后如何获得:
id_customer order_1 order_2 product_name_1 product_name_2
3 78 79 product1 product2
7 100 product4
9 109 product5
目标是在groupby之后检索2和每个'id_customer'匹配的行数之间的最小值,然后,如果可能的话,填写以上所有字段。
我从
开始def order_to_col(my_dataframe_df,my_list):
for num in range(0,min(len(my_list),2)):
my_dataframe_df['order_'+str(num)] = my_list[num]
test_df = test_df.groupby('id_customer').apply(lambda x: order_to_col(test_df,list(x.id_order)))
但我确定这不是好方法
注意:我建议使用 head 来执行此操作,而不是使用多列:
In [11]: g = df.groupby('id_customer')
In [12]: g.head(2)
Out[12]:
id_customer id_order product_name
0 3 78 product1
1 3 79 product2
3 7 100 product4
4 9 109 product5
您可以使用 nth 组合第 0 和第 1,然后连接这些:
In [21]: g = df.groupby('id_customer')
In [22]: g[['id_order', 'product_name']].nth(0)
Out[22]:
id_order product_name
id_customer
3 78 product1
7 100 product4
9 109 product5
In [23]: g[['id_order', 'product_name']].nth(1)
Out[23]:
id_order product_name
id_customer
3 79 product2
In [24]: a = g[['id_order', 'product_name']].nth(0)
b = g[['id_order', 'product_name']].nth(1)
In [25]: pd.concat([a, b], axis=1)
Out[25]:
id_order product_name id_order product_name
id_customer
3 78 product1 79 product2
7 100 product4 NaN NaN
9 109 product5 NaN NaN