gpt4 book ai didi

python - 创建具有两个键的字典,其中必须满足两个键才能检索值

转载 作者:行者123 更新时间:2023-12-04 10:42:38 25 4
gpt4 key购买 nike

我有两个数据框:

df_one:

person  city   year   col_x
ah bos 1998
bc bos 1996
dm ny 2001
hh la 1999

df_two:
person   city  range_a  range_b
mk bos 1995 2004
kk bos 2004 2017
ab ny 1977 2019
fc dc 2001 2005
cc dc 2006 2019
et la 1995 2005
tr mia 1997 2006

我想用基于 df_one 和 df_two 中的条件的值填充 df_one、col_x。您将从 df_one 中获取城市,从 df_two 中匹配城市,并根据 df_one 上的年份落在 df_two 范围之间的位置 - 您会将 df_two 上的人放入 df_one 上的 col_x 中。

示例:df_one 中第一行的“ah” - 城市是 bos,年份是 1998 - 所以 col_x 将是该行的 mk,因为城市匹配并且 1998 落在 1995 和 2004 之间。

我不确定从 Pandas 的哪里开始;我相信它可能是某种具有两个值的嵌套字典,但不确定这是否可能。

最佳答案

这是一种解决方法。
首先,我根据您的描述创建了数据框:

df1 = pd.DataFrame({'A': ['ah','bc','dm','hh'], 'B':['bos','bos','ny','la'], 'C': [1998,1996,2001,1999]})
df2 = pd.DataFrame({'A': ['mk','kk','ab','fc','cc','et','tr'], 'B':['bos','bos','ny','dc','dc','la','la'],'C': [1995,2004,1977,2001,2006,1995,1997], 'D':[2004,2017,2019,2005,2019,2005,2006] })

df1

A B C
0 ah bos 1998
1 bc bos 1996
2 dm ny 2001
3 hh la 1999

df2
A B C D
0 mk bos 1995 2004
1 kk bos 2004 2017
2 ab ny 1977 2019
3 fc dc 2001 2005
4 cc dc 2006 2019
5 et la 1995 2005
6 tr la 1997 2006

然后将 df1 的行传递给一个函数(检查数据)。该函数将 df1 的每一行与 df2 中的所有行进行比较,并根据您提到的条件返回 df2['A'] 中的所有匹配值。 请阅读我对您原始问题的评论。 df1 中的 'la' 将选择 df2 中的 2 个值。
选项 1:我已经选择了 df1['D'] 的所有值,并以列表形式出现。
选项 2 :我只选择了所有匹配值中的第一个值作为奇异值。

您可以选择要选择的选项或进一步说明。

选项 1:
def check_data(row):
return (df2[ (df2['B'] == row['B']) & (df2['C'] <= row['C']) & (df2['D'] >= row['C'])]['A'].values)
df1['D'] = df1.apply(check_data, axis=1)

df1

A B C D
0 ah bos 1998 [mk]
1 bc bos 1996 [mk]
2 dm ny 2001 [ab]
3 hh la 1999 [et, tr]

选项 2:
def check_data(row):
return (df2[ (df2['B'] == row['B']) & (df2['C'] <= row['C']) & (df2['D'] >= row['C'])]['A'].iloc[0])
df1['D'] = df1.apply(check_data, axis=1)

df1
A B C D
0 ah bos 1998 mk
1 bc bos 1996 mk
2 dm ny 2001 ab
3 hh la 1999 et

关于python - 创建具有两个键的字典,其中必须满足两个键才能检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59852491/

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