首页 > 解决方案 > 使用另一个列表中的值在数据框中添加行

问题描述

我有一个数据框:

df = pd.DataFrame(rows,columns=['proid','sku', 'qty'])

和独特的 skus 列表

skus = ["SKU1", "SKU2",  "SKU3"]

现在 df 可能不包含所有组合的行以及proid来自uniq 列表的位置skuskuskus

例如:

#    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

标签: pythonpandasdataframe

解决方案


您可以使用itertools.productconcat

设置

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

推荐阅读