熊猫-根据其他表格中的值设置行值

时间:2018-07-31 19:59:53

标签: python pandas dataframe

我在熊猫有两个桌子。其中一个大约是10,000+行,如下所示:

表1

col_1      date      state  ratio [50 more cols]
   A       10/12      NY     .5
   A       12/05      MA     NaN
   .........

我还有另一个大约10行的表,如下所示:

表2

date     state    ratio
12/05    MA       .9
12/03    MA       .8
............

我需要根据表2中的日期和状态值在表1中设置比率。理想的解决方案是在日期和状态上合并,但这会创建两列:ratio_x和ratio_y

我需要一种将表1中的比率设置为表2中日期和状态都匹配的相应比率的方法。表1中的比率可以被覆盖。

如果可以通过合并正确完成此操作,那么它也可以工作。

编辑:您可以将表2视为映射到特定状态值(因此,在此示例中,表2中的所有状态均为MA)

2 个答案:

答案 0 :(得分:0)

您需要选择第一个ratio值。假设您希望表2中的比率优先:

# join in ratio from the other table
table1 = table1.join(table2.set_index(["date", "state"])["ratio"].to_frame("ratio2"), on=["date", "state"])

# take ratio2 first, then the existing ratio value if ratio2 is null
table1["ratio"] = table1["ratio2"].fillna(table1["ratio"])

# delete the ratio2 column
del table1["ratio2"]

答案 1 :(得分:0)

首先从ModalComponent MC = new ModalComponent()..init(mTitle:'TitleX'); 创建一个映射系列:

df2

然后将Feed投放到s = df2.set_index(['date', 'state'])['ratio']

df1

df1['ratio'] = df1.set_index(['date', 'state']).index.map(s.get)\ .fillna(df1['ratio']) 中的比率优先。