python - 使用另一个列表中的值在数据框中添加行
问题描述
我有一个数据框:
df = pd.DataFrame(rows,columns=['proid','sku', 'qty'])
和独特的 skus 列表
skus = ["SKU1", "SKU2", "SKU3"]
现在 df 可能不包含所有组合的行以及proid
来自uniq 列表的位置sku
sku
skus
例如:
# proid sku qty
# 1 p1 SKU1 1
# 2 p1 SKU3 2
# 3 p2 SKU1 3
我想以这样一种方式将行添加到数据框,即所有proid
sku
组合都以默认值 0 存在
结果:
# proid sku qty
# 1 p1 SKU1 1
# 2 p1 SKU3 2
# 3 p2 SKU1 3
# 4 p1 SKU2 0
# 5 p2 SKU2 0
# 6 p2 SKU3 0
解决方案
您可以使用itertools.product
和concat
设置
z = io.StringIO(""" proid sku qty
1 p1 SKU1 1
2 p1 SKU3 2
3 p2 SKU1 3""")
df = pd.read_table(z, delim_whitespace=True)
p = ["p1", "p2"]
s = ["SKU1", "SKU2", "SKU3"]
df2 = pd.DataFrame(list(it.product(p,s)), columns=["proid", "sku"])
然后
连接
df = df.set_index(["proid", "sku"])
df2 = df2.set_index(["proid", "sku"])
pd.concat([df2[~df2.index.isin(df.index)],df]).reset_index()
proid sku qty
0 p1 SKU2 0
1 p2 SKU2 0
2 p2 SKU3 0
3 p1 SKU1 1
4 p1 SKU3 2
5 p2 SKU1 3
推荐阅读
- node.js - 无法安装 Vue.js Cli
- javascript - 用于从大段落中获取有限内容的机器人
- javascript - 使用 moment 的 JSON 日期的日期转换不正确,OffSet 值被忽略
- .net - .net 核心 windows 服务启用 Https
- flutter - 未处理的异常:键入“列表”
' 不是类型 'String?' 的子类型 在类型转换中 - directx-11 - 频繁更新 Texture2D 会导致进程崩溃 (UpdateSubresource)
- php - 外键 Laravel 8 的迁移表
- c# - 输入电话号码时的 Azure ADB2C 无密码数字键盘
- sql - 相同排序规则的结果集差异
- java - 无法找到方法 void org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions.setUseIR(boolean)