python - 在 Python 中将数据集转换为奖励/错过数据集
问题描述
我想在 Python 中使用 Pandas 和 NumPy转换以下数据集(CSV) :
表 1 (csv)
Ads, Impressions, Clicks
Ad_1, 11, 1
Ad_2, 10, 2
到
表 2 (csv)
Ad_1, Ad_2
0, 0
0, 0
0, 0
0, 1
0, 0
1, 0
0, 0
0, 0
0, 1
0, 0
0
表 2 的展示次数基本上是随机插入 1 的总行数(计数 = 点击次数)。
转换后的表格是使用机器学习的上置信界限算法对 2 个广告集运行 CTR 优化。请帮助如何将表 1 转换为表 2。
谢谢!
解决方案
我认为这应该可以解决问题:
import pandas as pd
import numpy as np
from io import StringIO
TESTDATA = StringIO("""Ads,Impressions,Clicks
Ad_1, 11, 1
Ad_2, 10, 2
""")
table_1 = pd.read_csv(TESTDATA, sep=",")
def convert(row):
clicks_to_generate = row['Clicks']
array_len = row['Impressions']
ad = np.zeros(array_len)
ad[:clicks_to_generate] = 1
np.random.shuffle(ad) # you want it random
return ad
ads = table_1.apply(convert, axis=1)
series_list = [pd.Series(ad) for ad in ads]
table_2 = pd.DataFrame(series_list).T
table_2 = table_2.add_prefix('Ad_')
print(table_2)
Ad_0 Ad_1
0 0.0 0.0
1 1.0 0.0
2 0.0 1.0
3 0.0 1.0
4 0.0 0.0
5 0.0 0.0
6 0.0 0.0
7 0.0 0.0
8 0.0 0.0
9 0.0 0.0
10 0.0 NaN
table_2.to_csv('table_2.csv', index=False)
推荐阅读
- python - Python使用索引签入列表
- java - 为什么我的 IntelliJ 项目上的运行功能不起作用?它变灰了
- javascript - 意外的令牌 <,javascript 文件被呈现为 html?
- sql - 如何复制现有列但所有值“一个单元格向上”,但由不同的列分区?
- python - 使用 dask 和 pandas 为大型数据集生成排列
- css - 如何在课堂上写一堂课
- python - 用于选择满足特定条件的日期范围的 for 循环
- java - 清单合并失败并出现多个错误,请参阅 Android Studio 上的日志
- php - 如何在 laravel 中使用 'WHERE' 和 'WhereNotIn'
- python - pythonw 3.6.6 sys.stdout 在重新分配时什么也不做