【问题标题】:Dictionary Unique Keys Rename and Replace字典唯一键重命名和替换
【发布时间】:2021-10-08 20:15:54
【问题描述】:

我有这样的字典格式结构

df = pd.DataFrame({'ID' : ['A', 'B', 'C'],
'CODES' : [{"1407273790":5,"1801032636":20,"1174813554":1,"1215470448":2,"1053754655":4,"1891751228":1},
{"1497066526":19,"1801032636":16,"1215470448":11,"1891751228":18},
{"1215470448":8,"1407273790":4},]})

现在我想创建一个唯一的键列表并像这样为它们创建名称 -

np_code     np_rename
1407273790  np_1
1801032636  np_2
1174813554  np_3
1215470448  np_4
1053754655  np_5
1891751228  np_6
1497066526  np_7

最后替换主数据框 df 中的新名称 -

df = pd.DataFrame({'ID' : ['A', 'B', 'C'],
'CODES' : [{"np_1":5,"np_2":20,"np_3":1,"np_4":2,"np_5":4,"np_6":1},
{"np_7":19,"1801032636":16,"np_4":11,"np_6":18},
{"np_4":8,"np_1":4},]})

【问题讨论】:

  • 你怎么知道 ID "A" 得到 np_1 和 ID "C" 得到 np_8 相同的 np_code 即 1407273790
  • 抱歉我现在编辑了代码

标签: pandas dictionary replace unique


【解决方案1】:

你可以在这里使用apply:

假设唯一列表数据框是unique_list_df

u = df['CODES'].map(lambda x: [*x.keys()]).explode().unique()
d = dict(zip(u,'np_'+pd.Index((pd.factorize(u)[0]+1).astype(str))))

f = lambda x: {d.get(k,k): v for k,v in x.items()}
df['CODES'] = df['CODES'].apply(f)

print(df)

  ID                                              CODES
0  A  {'np_1': 5, 'np_2': 20, 'np_3': 1, 'np_4': 2, ...
1  B   {'np_7': 19, 'np_2': 16, 'np_4': 11, 'np_6': 18}
2  C                             {'np_4': 8, 'np_1': 4}

【讨论】:

  • 非常感谢。如何获得唯一列表?我使用了这个 n_value = set(name for dic in df for name in dic.keys()),这会引发错误。
  • @Santoo 在您的问题中,唯一列表看起来像一个数据框?我已经定义了和unique_list_df一样的东西,然后你可以使用和我一样的代码来创建d
  • 是的,它是一个数据框。我的问题是如何从 df 中获取唯一的键列表?
  • @Santoo 对不起,我没有关注你。您的意思是您还想动态创建那个独特的数据框吗?目前这个问题看起来像你有 2 个 dfs,一个是原始的,另一个是唯一的列表数据框
  • 对上面的 df 感到抱歉,如何创建唯一的键列表?即如何创建 unique_list_df?我可以添加 np_rename 但如何获得 np_code?​​span>
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多