如何从现有数据框架创建新数据框?

时间:2018-06-07 23:54:56

标签: python python-2.7 pandas dataframe

我有以下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

我们如何从这里获得最终结果? 提前谢谢!

2 个答案:

答案 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)

您可以分两步完成:

  1. 使用一系列以逗号分隔的字符串展开/展平您的数据框。
  2. 使用pandas.crosstab将您的点数制成表格。
  3. 以下是假设您已执行合并并且结果为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