gpt4 book ai didi

python - 使用 Pandas 通过列循环字典

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:10 25 4
gpt4 key购买 nike

我有一个数据框,其中有一列名为“输入”,由各种数字组成。

我创建了一个看起来像这样的字典

sampleDict = {
"a" : ["123","456"],
"b" : ["789","272"]
}

我正在尝试针对该词典循环遍历“输入”列。如果找到字典中的任何值(123、789 等),我想在我的数据框中创建一个新列来表示找到它的位置。

例如,当在“输入”中找到 456 时,我想创建名为“found”的列,其中值为“a”。当在输入中找到 789 时,值为“b”。

我尝试了以下代码,但我的逻辑似乎不对:

for key in sampleDict:
for p_key in df['Input']:
if code in p_key:
if code in sampleDict[key]:
df = print(code)
print(df)

最佳答案

通过扁平列表到字典使用 map,只需要列表中的所有值都是唯一的:

d = {k: oldk for oldk, oldv in sampleDict.items() for k in oldv}
print (d)
{'123': 'a', '456': 'a', '789': 'b', '272': 'b'}

df = pd.DataFrame({'Input':['789','456','100']})
df['found'] = df['Input'].map(d)
print (df)
Input found
0 789 b
1 456 a
2 100 NaN

如果 list 中的重复值是可能的,请使用聚合,例如第一步通过join,通过Seriesmap:

sampleDict = {
"a" : ["123","456", "789"],
"b" : ["789","272"]
}


df1 = pd.DataFrame([(k, oldk) for oldk, oldv in sampleDict.items() for k in oldv],
columns=['a','b'])
s = df1.groupby('a')['b'].apply(', '.join)
print (s)
a
123 a
272 b
456 a
789 a, b
Name: b, dtype: object

df = pd.DataFrame({'Input':['789','456','100']})
df['found'] = df['Input'].map(s)
print (df)
Input found
0 789 a, b
1 456 a
2 100 NaN

关于python - 使用 Pandas 通过列循环字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51472720/

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