gpt4 book ai didi

python - 如何使用字典和 isin()?

转载 作者:行者123 更新时间:2023-11-28 22:19:35 25 4
gpt4 key购买 nike

我有一本字典,我想使用该字典对 df 中的新列进行分类。 df 中的 Value 列应该与字典中的值进行比较。 df 中的新列应该是与值关联的键。

d = {'Car':['1','2','3'],
'Chicken legs':['4','5','6'],
'Coronary artery bypass graft surgery':['7','8','9','10','11','12']}

df

Color   Style      Value
red round 1
blue square 5
green triangle 9
orange sphere 12

最终目标

Color   Style      Value   Thing
red round 1 Car
blue square 5 Chicken legs
green triangle 9 Coronary artery bypass graft surgery
orange sphere 12 Coronary artery bypass graft surgery

我的第一个想法是将其放入 df (df_dict),但我无法将 df 中的单个值与 df_dict 中的列表进行比较。

df_dict = pd.DataFrame({'Thing':list(d.keys()), 'Values':list(d.values())})

Thing Values
0 Car [1, 2, 3]
1 Chicken_legs [4, 5, 6]
2 Coronary artery bypass graft surgery [7, 8, 9, 10, 11, 12]

以下代码适用于单个元素。然而,我的字典有 32 个元素,我认为有比只创建下面代码的 32 个版本更好的方法。我只是不知道那种方法会是什么。

df.loc[df['Value'].isin(['1', '2', '3]),'Thing']='Car'

是否可以使用字典和isin()?我应该改为将字典转换为列表吗?

最佳答案

你可以为此创建一个辅助函数:

In [60]: def argcontains(item):
...: for i, v in d.items():
...: if item in v:
...: return i
...:

然后将其映射到适当的列:

In [61]: df['thing'] = df.Value.map(argcontains)

In [62]: df
Out[62]:
Value thing
0 1 Car
1 5 Chicken legs
2 9 Coronary artery bypass graft surgery
3 12 Coronary artery bypass graft surgery

这可以稍微通用一些(并且避免每次都重新计算 d.items(),尽管这是非常小的)例如:

In [73]: def argcontains2(item_iterator, item):
...: for i, v in item_iterator:
...: if item in v:
...: return i
...:

In [74]: from functools import partial

In [75]: argcontains = partial(argcontains2, d.items())

如果您需要经常按值引用 d 中的数据,那么最好创建数据的反向索引(反向字典),如另一个答案中所述。

但是,如果您只需要一次反向查找来构造此列,那么使用如上所示的简单循环将使用更少的内存和需要更少的计算。

关于python - 如何使用字典和 isin()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640298/

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