gpt4 book ai didi

python - 如果值列表中的一个在行中匹配,如何将字典的 "reverse-map"键转换为一行?

转载 作者:行者123 更新时间:2023-12-03 21:14:43 24 4
gpt4 key购买 nike

有这个列表,其中包括列、年份和标准。还有一个标签(键)字典,每个标签(键)都有一个标准(值)列表。
我想为每行添加一个标签,其中条件与值列表中的一个条目匹配。

举个例子:

import pandas as pd 

labels_dict = {'label_1': [1,2],
'label_2': [4,6]}

df = pd.DataFrame({'year':[2014,2014,2015,2015,2016,2016],
'criterion':[1,2,3,4,5,6]})

>>> print(df)
year criterion
0 2014 1
1 2014 2
2 2015 3
3 2015 4
4 2016 5
5 2016 6


target_labels = pd.DataFrame({'labels': ['label_1', 'label_1', pd.NaT, 'label_2', pd.NaT, 'label_2']})

target_df = pd.concat([df, target_labels], axis=1)

>>> print(target_df)
year criterion labels
0 2014 1 label_1
1 2014 2 label_1
2 2015 3 NaT
3 2015 4 label_2
4 2016 5 NaT
5 2016 6 label_2

一些注意事项:

标签字典是我能想到的最好的主意,但由于我手动创建它,我可以使用不同的对象。

我尝试失败(每个循环覆盖整列):
for key in labels_dict.keys():
df['labels'] = df.loc[df['criterion'].isin(labels_dict[key]), :]['year'].apply(lambda x: key)

labels_dict 中切换键和值不起作用,因为列表是不可散列的。

最佳答案

最简单的方法是创建一个反向字典和映射:

reverse_label = {x:k for k,v in labels_dict.items() for x in v}

df['labels'] = df['criterion'].map(reverse_label)

输出:
   year  criterion   labels
0 2014 1 label_1
1 2014 2 label_1
2 2015 3 NaN
3 2015 4 label_2
4 2016 5 NaN
5 2016 6 label_2

关于python - 如果值列表中的一个在行中匹配,如何将字典的 "reverse-map"键转换为一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61592891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com