[英]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.