Python 使用dict和元组键替换数据帧中的列值
我有两个数据帧,一个包含我要更新的数据,另一个提供基于多索引键的查找来设置值 例如,我有两个csv: fruit.csvPython 使用dict和元组键替换数据帧中的列值,python,pandas,dataframe,mapping,multi-index,Python,Pandas,Dataframe,Mapping,Multi Index,我有两个数据帧,一个包含我要更新的数据,另一个提供基于多索引键的查找来设置值 例如,我有两个csv: fruit.csv 水果、颜色、状态、更多信息、数据 苹果、红的、好的等等。 苹果、绿色、发霉等。 苹果、绿色、优质等。 梨、红、优等。 梨、绿、好等。 石灰、绿色、劣质等。 评级.csv 水果、州、等级 苹果,很好,11 苹果,好的,8 苹果,坏的,4 苹果,发霉,0 梨,很好,9 梨,好的,5 梨,坏的,2 梨,发霉,1 酸橙,非常好,10 酸橙,好的,7 酸橙,坏的,5 石灰,发霉,2
水果、颜色、状态、更多信息、数据
苹果、红的、好的等等。
苹果、绿色、发霉等。
苹果、绿色、优质等。
梨、红、优等。
梨、绿、好等。
石灰、绿色、劣质等。
评级.csv
水果、州、等级
苹果,很好,11
苹果,好的,8
苹果,坏的,4
苹果,发霉,0
梨,很好,9
梨,好的,5
梨,坏的,2
梨,发霉,1
酸橙,非常好,10
酸橙,好的,7
酸橙,坏的,5
石灰,发霉,2
我在数据帧中读到:
static\u data\u dir=Path(\uuu file.resolve().parent
fruit=pd.read\u csv(静态\u数据\u dir.joinpath(“fruit.csv”),索引\u col=[“fruit”,“Color”])
rating=pd.read\u csv(静态数据目录joinpath(“rating.csv”),索引列=[“水果”,“状态])
现在我想用Rating DataFrame中的Rating值替换fruit DataFrame中的状态值,结果如下
State more data
Fruit Color
Apple Red 8 etc. etc.
Green 0 etc. etc.
Green 11 etc. etc.
Pear Red 9 etc. etc.
Green 5 etc. etc.
Lime Green 5 etc. etc.
实际上,我想使用pandas.Series.replace
,但用元组键传入dict,但这似乎不受支持
{'Rating': {('Apple', 'Bad'): 4,
('Apple', 'Excellent'): 11,
('Apple', 'Good'): 8,
('Apple', 'Mouldy'): 0,
('Lime', 'Bad'): 5,
('Lime', 'Excellent'): 10,
('Lime', 'Good'): 7,
('Lime', 'Mouldy'): 2,
('Pear', 'Bad'): 2,
('Pear', 'Excellent'): 9,
('Pear', 'Good'): 5,
('Pear', 'Mouldy'): 1}}
如何最好地实现这一点?读取两个csv作为普通数据帧,然后通过设置
How=“left”
使用four
中的键在four
和State
列上显示。最后设置水果
和颜色
列作为索引
将熊猫作为pd导入
水果=pd.read\u csv(“水果.csv”)
评级=pd.read\U csv(“评级.csv”)
水果['State']=水果。合并(评级,on=[“水果”,“状态”],how=“left”)[“评级”]
水果。集合指数([“水果”、“颜色”],原地=真)
State more data
Fruit Color
Apple Red 8 etc. etc.
Green 0 etc. etc.
Green 11 etc. etc.
Pear Red 9 etc. etc.
Green 5 etc. etc.
Lime Green 5 etc. etc.
{'Rating': {('Apple', 'Bad'): 4,
('Apple', 'Excellent'): 11,
('Apple', 'Good'): 8,
('Apple', 'Mouldy'): 0,
('Lime', 'Bad'): 5,
('Lime', 'Excellent'): 10,
('Lime', 'Good'): 7,
('Lime', 'Mouldy'): 2,
('Pear', 'Bad'): 2,
('Pear', 'Excellent'): 9,
('Pear', 'Good'): 5,
('Pear', 'Mouldy'): 1}}
print(fruit)
State more data
Fruit Color
Apple Red 8 etc. etc.
Green 0 etc. etc.
Green 11 etc. etc.
Pear Red 9 etc. etc.
Green 5 etc. etc.
Lime Green 5 etc. etc.