Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用其他列表中的值在数据框中添加行_Python_Pandas_Dataframe - Fatal编程技术网

Python 使用其他列表中的值在数据框中添加行

Python 使用其他列表中的值在数据框中添加行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框: df = pd.DataFrame(rows,columns=['proid','sku', 'qty']) 以及独特的SKU列表 skus = ["SKU1", "SKU2", "SKU3"] 现在df可能不包含所有组合的行proid和sku,其中sku来自uniq列表sku e、 g: 我希望将行添加到数据框中,使所有proidsku组合都具有默认的0值 结果: # proid sku qty # 1 p1 SKU1 1 # 2 p1

我有一个数据框:

df = pd.DataFrame(rows,columns=['proid','sku', 'qty'])
以及独特的SKU列表

skus = ["SKU1", "SKU2",  "SKU3"]
现在df可能不包含所有组合的行
proid
sku
,其中
sku
来自uniq列表
sku

e、 g:

我希望将行添加到数据框中,使所有
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

设置 然后

海螺
您可以使用
itertools.product
concat

设置 然后

海螺
另一个行之有效的答案是:

from itertools import product

combs = pd.DataFrame(list(product(df[proid], df[sku])),
                 columns=["proid", "sku"])
result = df.merge(combs, how = 'right').fillna(0).drop_duplicates()

另一个行之有效的答案是:

from itertools import product

combs = pd.DataFrame(list(product(df[proid], df[sku])),
                 columns=["proid", "sku"])
result = df.merge(combs, how = 'right').fillna(0).drop_duplicates()

从所有可能索引的多索引创建数据帧

ind = pd.MultiIndex.from_product(
      [['p1', 'p2'], ['SKU1', 'SKU2' ,'SKU3']]
).to_frame().reset_index(drop=True).rename({0:'proid', 1: 'sku'}, axis=1)
左连接到原始数据帧

ind.merge(df, on=['proid', 'sku'], how='left').fillna(0)
产出:

  proid   sku  qty
0    p1  SKU1  1.0
1    p1  SKU2  0.0
2    p1  SKU3  2.0
3    p2  SKU1  3.0
4    p2  SKU2  0.0
5    p2  SKU3  0.0
或者,创建一个多索引&重新索引原始数据帧,用0填充空值

ind2 = pd.MultiIndex.from_product(names=['proid', 'sku'], 
    iterables=[['p1', 'p2'], ['SKU1', 'SKU2' ,'SKU3']])
df.set_index(['proid', 'sku']).reindex(ind2, fill_value=0).reset_index()

从所有可能索引的多索引创建数据帧

ind = pd.MultiIndex.from_product(
      [['p1', 'p2'], ['SKU1', 'SKU2' ,'SKU3']]
).to_frame().reset_index(drop=True).rename({0:'proid', 1: 'sku'}, axis=1)
左连接到原始数据帧

ind.merge(df, on=['proid', 'sku'], how='left').fillna(0)
产出:

  proid   sku  qty
0    p1  SKU1  1.0
1    p1  SKU2  0.0
2    p1  SKU3  2.0
3    p2  SKU1  3.0
4    p2  SKU2  0.0
5    p2  SKU3  0.0
或者,创建一个多索引&重新索引原始数据帧,用0填充空值

ind2 = pd.MultiIndex.from_product(names=['proid', 'sku'], 
    iterables=[['p1', 'p2'], ['SKU1', 'SKU2' ,'SKU3']])
df.set_index(['proid', 'sku']).reindex(ind2, fill_value=0).reset_index()