gpt4 book ai didi

python - 基于两列 Pandas 映射字典的最有效方法

转载 作者:太空狗 更新时间:2023-10-30 02:39:35 25 4
gpt4 key购买 nike

我有以下问题:我想根据 pandas dataframe 中的 2 列映射 dictdict。然而,到目前为止我想到的唯一解决方案是使用 apply。问题是我的数据框有超过一百万行,所以使用 apply 可能会很长。关于如何更有效地做到这一点的任何想法?到目前为止,这是我的代码:

import pandas as pd
import numpy as np

dict_dict = {'A': {'a': 1, 'b': 2, 'c': 3},
'B': {'a': 4, 'b': 5, 'c': 6},
'C': {'a': 7, 'b': 8, 'c': 9},
'D': {'a': 10, 'b': 11, 'c': 12}}

list1 = ['A', 'B', 'C']
list2 = ['a', 'b', 'c']

np.random.seed(100)

df = pd.DataFrame()
df['col1'] = np.random.choice(list1, 10)
df['col2'] = np.random.choice(list2, 10)

df['map'] = df.apply(lambda x: dict_dict[x.col1][x.col2], axis=1)

df

col1 col2 map
0 A c 3
1 A c 3
2 A b 2
3 C a 7
4 C a 7
5 A a 1
6 C a 7
7 B c 6
8 C a 7
9 C b 8

最佳答案

您可以从 dict_dict 构建一个 DataFrame 并使用 merge :

# Construct a DataFrame from dict_dict
df2 = pd.DataFrame(dict_dict).stack().rename('map').to_frame()

# Perform a merge.
df = df.merge(df2, how='left', left_on=['col2', 'col1'], right_index=True)

结果输出:

  col1 col2  map
0 A c 3
1 A c 3
2 A b 2
3 C a 7
4 C a 7
5 A a 1
6 C a 7
7 B c 6
8 C a 7
9 C b 8

关于python - 基于两列 Pandas 映射字典的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076194/

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