将具有多个键的Python字典映射到数据框中,其中多个列匹配键

时间:2018-05-31 19:52:25

标签: python pandas dictionary dataframe

我有一本字典,我希望将其映射到当前数据框并创建一个新列。我在元组中有键,它映射到我的数据帧中的两个不同的列。

dict = {('County', 'State'):'CountyType'}
df = pd.DataFrame(data=['County','State'])

我想创建一个新列CountyType,使用dict映射到df中的两列。但是,执行以下操作会给我一个错误。怎么可能这样做?

df['CountyType'] = (list(zip(df.County,df.State)))
df = df.replace({'CountyType': county_type_dict)

2 个答案:

答案 0 :(得分:3)

您可以从两个系列中创建MultiIndex然后映射。来自@ALollz的数据。

df['CountyType'] = df.set_index(['County', 'State']).index.map(dct.get)

print(df)

  County  State CountyType
0      A      1        One
1      A      2       None
2      B      1       None
3      B      2        Two
4      B      3      Three

答案 1 :(得分:0)

如果您有以下字典,其中元组为键,而DataFrame的字符对应于元组值

import pandas as pd
dct = {('A', 1): 'One', ('B', 2): 'Two', ('B', 3): 'Three'}
df = pd.DataFrame({'County': ['A', 'A', 'B', 'B', 'B'],
                   'State': [1, 2, 1, 2, 3]})

您可以从Series创建df个元组,然后只使用.map()

df['CountyType'] = pd.Series(list(zip(df.County, df.State))).map(dct)

结果

  County  State CountyType
0      A      1        One
1      A      2        NaN
2      B      1        NaN
3      B      2        Two
4      B      3      Three