[英]How to create a new dataframe from existing dataframes?
我有以下2個數據幀:
DF1
product_ID tags
100 chocolate, sprinkles
101 chocolate, filled
102 glazed
DF2
customer product_ID
A 100
A 101
B 101
C 100
C 102
B 101
A 100
C 102
我應該能夠像這樣創建一個新的數據幀。
| customer | chocolate | sprinkles | filled | glazed |
|----------|-----------|-----------|--------|--------|
| A | ? | ? | ? | ? |
| B | ? | ? | ? | ? |
| C | ? | ? | ? | ? |
其中單元格的內容表示產品屬性的出現次數。
我使用了merge
並得到了以下結果
df3 = pd.merge(df2, df1)
df3.drop(['product'], axis = 1)
customer tags
A chocolate, sprinkles
C chocolate, sprinkles
A chocolate, sprinkles
A chocolate, filled
B chocolate, filled
B chocolate, filled
C glazed
C glazed
我們如何從這里得到最終結果? 提前致謝!
使用get_dummies
df.set_index('customer').tags.str.get_dummies(sep=',').sum(level=0)
Out[593]:
chocolate filled glazed sprinkles
customer
A 3 1 0 2
C 1 0 2 1
B 2 2 0 0
您可以通過兩個步驟完成此操作:
pandas.crosstab
將計數列表。 這是一個假設您已執行合並並且結果為df
的示例:
import numpy as np
from itertools import chain
# split by comma to form series of lists
tag_split = df['tags'].str.split(',')
# create expanded dataframe
df_full = pd.DataFrame({'customer': np.repeat(df['customer'], tag_split.map(len)),
'tags': list(chain.from_iterable(tag_split))})
# use pd.crosstab for result
res = pd.crosstab(df_full['customer'], df_full['tags'])
print(res)
tags filled sprinkles chocolate glazed
customer
A 1 2 3 0
B 2 0 2 0
C 0 1 1 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.