簡體   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