Python 使用dict和元组键替换数据帧中的列值

Python 使用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:

fruit.csv

水果、颜色、状态、更多信息、数据
苹果、红的、好的等等。
苹果、绿色、发霉等。
苹果、绿色、优质等。
梨、红、优等。
梨、绿、好等。
石灰、绿色、劣质等。
评级.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.