繁体   English   中英

如果值是列表,如何根据值将字典键转换为 dataframe 列

[英]How to transform dictionary keys into a dataframe column based on the values if the values are lists

我有一个字典,其中键是数字,值是字符串列表。 我想创建一个 dataframe 列,其中列值是字典键,并且根据将每行中另一列的值与字典值列表中的项目匹配来选择键。 请参阅下面的示例代码:示例开始 dataframe 和字典:

dict_x = {1:[a], 2:[b, c, e], 3:[d, f]
df = ['ID':[a, b, c, d, e, f]]

所需的 output:

df = ['ID':[a, b, c, d, e, f], 'Number':[1, 2, 2, 3, 2, 3]]

我认为某种df['Number'] = df['ID'].apply(lambda x:???)会起作用,但我在这里遇到了条件,我尝试编写一些 for 循环但跑进去了当我写专栏时,只保留循环的最后一次迭代的问题。

只需通过切换键和值的角色来反转字典dict_x (循环列表元素来做到这一点)。

# setup dictionary properly 
dict_x = {1:['a'], 2:['b', 'c', 'e'], 3:['d', 'f']}
df = pd.DataFrame({'ID':['a', 'b', 'c', 'd', 'e', 'f']})

# reverse dictionary
rev_dict_x = dict()
for k,v in dict_x.items():
    for v_elem in v:
        rev_dict_x[v_elem] = k
        
# replace elements
df['Number'] = df['ID'].replace(rev_dict_x)

>df

在此处输入图像描述

请注意,这假定列表中的元素分别是唯一的。 否则,设置rev_dict_x将覆盖这些键的值。

我希望我对您的理解正确:

df = pd.DataFrame(
    [(k, i) for k, v in dict_x.items() for i in v], columns=["Number", "ID"]
)
print(df)

印刷:

   Number ID
0       1  a
1       2  b
2       2  c
3       2  e
4       3  d
5       3  f

或者:

df = (
    pd.DataFrame([dict_x])
    .melt()
    .explode("value")
    .rename(columns={"variable": "Number", "value": "ID"})
)
print(df)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM