我有以下2个数据帧:
DF1
clip
DF2
product_ID tags
100 chocolate, sprinkles
101 chocolate, filled
102 glazed
我应该能够像这样创建一个新的数据帧。
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
我们如何从这里获得最终结果? 提前谢谢!
答案 0 :(得分:3)
使用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
答案 1 :(得分:2)
您可以分两步完成:
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