簡體   English   中英

如何從現有數據框架創建新數據框?

[英]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

您可以通過兩個步驟完成此操作:

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM