根据列条件添加包含来自另一个数据帧的值的列

ccs*_*cic 4 python dataframe pandas

我有两个不同索引长度的数据帧,如下所示:

df_1:

    State  Month  Total Time ... N columns
     AL     4       1000
     AL     5       500
      .
      .
      .
     VA     11      750
     VA     12      1500 
Run Code Online (Sandbox Code Playgroud)

df_2:

    State   Month ... N columns
     AL      4        
     AL      5
      .
      .
      .
     VA      11
     VA      12
Run Code Online (Sandbox Code Playgroud)

如果数据帧之间的“州”和“月”值相同,我想向 df_2 添加一个“总时间”列,该列使用 df_1 的“总时间”列中的值。最终,我会得到:

df_2:

    State  Month  Total Time ... N columns
     AL     4       1000
     AL     5       500
      .
      .
      .
     VA     11      750
     VA     12      1500 
Run Code Online (Sandbox Code Playgroud)

我想有条件地执行此操作,因为索引长度不相同。到目前为止我已经尝试过了:

def f(row):
     if (row['State'] == row['State']) & (row['Month'] == row['Month']):
         val = x for x in df_1["Total Time"]
     return val

df_2['Total Time'] = df_2.apply(f, axis=1)
Run Code Online (Sandbox Code Playgroud)

这不起作用。你会用什么方法来实现这个目标?任何帮助表示赞赏!

May*_*wal 5

你可以这样做:

考虑我的示例数据框:

In [2327]: df_1                                                                                                                                                                                              
Out[2327]: 
  State  Month  Total Time
0    AL      2        1000
1    AB      4         500
2    BC      1         600

In [2328]: df_2                                                                                                                                                                                              
Out[2328]: 
  State  Month
0    AL      2
1    AB      5

In [2329]: df_2 = pd.merge(df_2, df_1, on=['State', 'Month'], how='left')                                                                                                                                      

In [2330]: df_2                                                                                                                                                                                              
Out[2330]: 
  State  Month  Total Time
0    AL      2      1000.0
1    AB      5         NaN
Run Code Online (Sandbox Code Playgroud)