为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过字典在 pandas 中创建新行

如何通过字典在 pandas 中创建新行

Smart猫小萌 2023-12-26 16:58:51
我对 pandas DataFrame 有问题 - 我不明白如何创建新行并将它们与字典合并。例如,我有这个数据框:shops = [{'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Rexona', 'Value': 10},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'AXE', 'Value': 20},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Old Spice', 'Value': 30},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Camel', 'Value': 40},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Dove', 'Value': 50},       {'Chain': 'SeQu', 'Shop': 'Rum', 'Location': 'USA', 'Brand': 'Rexona', 'Value': 10},    {'Chain': 'SeQu', 'Shop': 'Rum', 'Location': 'USA', 'Brand': 'CIF', 'Value': 20},    {'Chain': 'SeQu', 'Shop': 'Rum', 'Location': 'USA', 'Brand': 'Old Spice', 'Value': 30},    {'Chain': 'SeQu', 'Shop': 'Rum', 'Location': 'USA', 'Brand': 'Camel', 'Value': 40}]同时,我有一个具有 Chain-Brand 连接的字典数据框:chain_brands = [{'Chain': 'SeQu', 'Brand': 'Rexona'},    {'Chain': 'SeQu', 'Brand': 'Axe'},    {'Chain': 'SeQu', 'Brand': 'Old Spice'},    {'Chain': 'SeQu', 'Brand': 'Camel'},    {'Chain': 'SeQu', 'Brand': 'Dove'},    {'Chain': 'SeQu', 'Brand': 'CIF'}]因此,我需要创建新行并用 0 填充它们(如果品牌为 Null)。它应该看起来像这样:output = [{'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Rexona', 'Value': 10},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'AXE', 'Value': 20},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Old Spice', 'Value': 30},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Camel', 'Value': 40},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'Dove', 'Value': 50},    {'Chain': 'SeQu', 'Shop': 'Rimme', 'Location': 'UK', 'Brand': 'CIF', 'Value': 0},谢谢!
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您可以从数据帧创建多索引chain_brands,然后groupby与 一起使用reindex来解决此问题:


mi = pd.MultiIndex.from_arrays(chain_brands.values.T, names=['Chain', 'Brand'])


s = shops.set_index(['Chain', 'Brand']).\

    groupby(['Location', 'Shop']).\

    apply(lambda x: x.reindex(mi, fill_value=0)).\

    drop(columns=['Location', 'Shop']).\

    reset_index()

结果:


   Location   Shop Chain      Brand  Value

0        UK  Rimme  SeQu     Rexona     10

1        UK  Rimme  SeQu        Axe      0

2        UK  Rimme  SeQu  Old Spice     30

3        UK  Rimme  SeQu      Camel     40

4        UK  Rimme  SeQu       Dove     50

5        UK  Rimme  SeQu        CIF      0

6       USA    Rum  SeQu     Rexona     10

7       USA    Rum  SeQu        Axe      0

8       USA    Rum  SeQu  Old Spice     30

9       USA    Rum  SeQu      Camel     40

10      USA    Rum  SeQu       Dove      0

11      USA    Rum  SeQu        CIF     20


查看完整回答
反对 回复 2023-12-26
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信