将具有多个键的 Python 字典映射到具有多个匹配键的列的数据框中
Posted
技术标签:
【中文标题】将具有多个键的 Python 字典映射到具有多个匹配键的列的数据框中【英文标题】:Mapping Python dictionary with multiple keys into dataframe with multiple columns matching keys 【发布时间】:2018-11-10 21:49:43 【问题描述】:我有一个字典,我想映射到当前数据框并创建一个新列。我在一个元组中有键,它们映射到我的数据框中的两个不同列。
dct = ('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)
【问题讨论】:
不要命名字典dict
,它会覆盖内置名称
我很好奇如何创建元组字典。它类似于 jpp 的答案。 yourdict = df.set_index(['County','State'])['CountyType'].to_dict()
也可以在这里阅读更多内容:***.com/questions/42276588/…
【参考方案1】:
如果您有以下字典,其中元组作为键,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])
您可以从 df
创建元组的 Series
,然后使用 .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
【讨论】:
你能用这个只填nan吗?我尝试使用 pd.Series.fillna(),但不起作用。【参考方案2】:您可以从两个系列中创建一个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
【讨论】:
AttributeError: 'DataFrame' object has no attribute 'map' 你如何克服这个问题? 你必须使用index
属性。即df.index.map
,而不是df.map
。
谢谢。如何使用此行仅填写“县类型”中的 nans?
@FaaizQadri,不确定 - 这将是一个新问题。以上是关于将具有多个键的 Python 字典映射到具有多个匹配键的列的数据框中的主要内容,如果未能解决你的问题,请参考以下文章