首页 > 解决方案 > 取消堆叠一列并创建新的交互列

问题描述

我正在尝试取消堆叠一列(例如列“广告”)并与其他列(“点击”和“印象”)创建新的交互列。例如,来自:

    date    ads   clicks    impression
0    1-1      A       50            60
1    1-2      A       60            90
2    1-3      A        5            10
3    1-1      B      200           300
4    1-2      B      600           800
5    1-4      B     1000          2000

至(如果没有可用数据,则填写零或 NA):

    date    clicks.A    impression.A    clicks.B    impression.B
0    1-1          50              60         200             300
1    1-2          60              90         600             800
2    1-3           5              10           0               0
3    1-4           0               0        1000            2000

数据的 Python 代码:

import pandas as pd

df = pd.DataFrame({'date':['1-1','1-2','1-3','1-1','1-2','1-4'],
                   'ads':['A','A','A','B','B','B'],
                   'clicks':[50,60,5,200,600,1000],
                   'impression':[60,90,10,300,800,2000]})
# what I want 
df2 = pd.DataFrame({'date':['1-1','1-2','1-3','1-4'],
                   'clicks.A':[50,60,5,0],
                   'impression.A':[60,90,10,0],
                   'clicks.B':[200,600,0,1000],
                   'impression.B':[300,800,0,2000]})

我可以通过 for 循环完成这项工作,但我的数据量很大,我无法这样做。有没有更有效的方法?谢谢!

标签: pythonpython-3.xpandas

解决方案


你可以玩一下索引,然后unstack

>>> df = df.set_index(["date", "ads"]).unstack("ads").fillna(0)
>>> df.columns = map(".".join, df.columns)
>>> df
      clicks.A  clicks.B  impression.A  impression.B
date                                                
1-1       50.0     200.0          60.0         300.0
1-2       60.0     600.0          90.0         800.0
1-3        5.0       0.0          10.0           0.0
1-4        0.0    1000.0           0.0        2000.0

推荐阅读