pandas 如何在panda中将两列压缩到键值对字典中

kkih6yb8  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(158)

我有一个 Dataframe ,其中有两个相关的列,需要将它们合并为一个dictionary列。
示例数据:

skuId   coreAttributes.price    coreAttributes.amount
0   100     price                   8.84
1   102     price                   12.99
2   103     price                   9.99

预期输出:

skuId    coreAttributes
100      {'price': 8.84}
102      {'price': 12.99}
103      {'price': 9.99}

我尝试过:

planProducts_T = planProducts.filter(regex = 'coreAttributes').T
planProducts_T.columns = planProducts_T.iloc[0]
planProducts_T.iloc[1:].to_dict(orient = 'records')

得到UserWarning: DataFrame columns are not unique, some columns will be omitted.和以下输出:

[{'price': 9.99}]

你们谁能帮帮我。

watbbzwu

watbbzwu1#

可以将列表解析与python的zip结合使用:

df['coreAttributes'] = [{k: v} for k,v in
                        zip(df['coreAttributes.price'],
                            df['coreAttributes.amount'])]

输出量:

skuId coreAttributes.price  coreAttributes.amount    coreAttributes
0    100                price                   8.84   {'price': 8.84}
1    102                price                  12.99  {'price': 12.99}
2    103                price                   9.99   {'price': 9.99}
  • 如果需要删除初始列,请使用pop。*
df['coreAttributes'] = [{k: v} for k,v in
                        zip(df.pop('coreAttributes.price'),
                            df.pop('coreAttributes.amount'))]

输出量:

skuId    coreAttributes
0    100   {'price': 8.84}
1    102  {'price': 12.99}
2    103   {'price': 9.99}
csga3l58

csga3l582#

您可以使用apply和drop进行优化计算,

df["coreAttributes"] = df.apply(lambda row: {row["coreAttributes.price"]: row["coreAttributes.amount"]}, axis=1)
df.drop(["coreAttributes.price","coreAttributes.amount"], axis=1)

输出功率

skuId   coreAttributes
0   100     {'price': 8.84}
1   102     {'price': 12.99}
2   103     {'price': 9.99}

相关问题