python - 取消堆叠一列并创建新的交互列
问题描述
我正在尝试取消堆叠一列(例如列“广告”)并与其他列(“点击”和“印象”)创建新的交互列。例如,来自:
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 循环完成这项工作,但我的数据量很大,我无法这样做。有没有更有效的方法?谢谢!
解决方案
你可以玩一下索引,然后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
推荐阅读
- javascript - 在节点js中将html表数据插入mysql数据库
- html - 仅 CSS 手风琴布局
- javascript - Javascript 为什么标头脚本中的对象属性可以,但在 html 中未定义?
- react-native - 如何在 Connect 组件下的 graphql 查询中使用 $filter 变量?
- r - 根据唯一值有条件地将字符串更改为因子?
- javascript - Sequilize 在 where 子句中查找表的最高值
- c# - 如何在 Visual Studio 2019 中禁用关于 System.String 的浮动提示
- python - 模块已安装但导入 cartopy 时出错
- css - 我如何使用 flexbox 来实现它?
- selenium - 文件未在 Selenium 上使用 WebElement 上传