首页 > 解决方案 > 根据两个条件将值从一列复制到具有不同行的另一列

问题描述

我的数据框基本上是这样的:

data = [[11200, 33000,dt.datetime(1995,3,1),10,np.nan], [11200, 33000, dt.datetime(1995,3,2),11, np.nan],[11200, 33000, dt.datetime(1995,3,3),9, np.nan],\
[23400, 45000, dt.datetime(1995,3,1),50, np.nan],  [23400, 45000, dt.datetime(1995,3,3),49, np.nan], [33000, 55000, dt.datetime(1995,3,1),60, np.nan], [33000, 55000, dt.datetime(1995,3,2),61, np.nan]]


df = pd.DataFrame(data, columns = ["Identifier", "Identifier2" ,"date", "price","price2"])

输出如下所示:

index Identifier1 Identifier2     date    price1 price2 
  0      11200      33000      1995-03-01   10     nan
  1      11200      33000      1995-03-02   11     nan
  2      11200      33000      1995-03-03    9     nan
  3      23400      45000      1995-03-01   50     nan
  4      23400      45000      1995-03-03   49     nan
  5      33000      55000      1995-03-01   60     nan
  6      33000      55000      1995-03-02   61     nan

请注意,我的索引不是像我的示例 df 那样按升序排序。我想:在 Identifier 1 列中查找 Identifier2 列中的数字(我知道要查找的确切数字)。然后将 price1 的值复制到 price2 相对于正确日期的值,因为缺少某些日期.

我的目标是这样的:

   index Identifier1 Identifier2     date    price1 price2 
      0      11200      33000      1995-03-01   10     60
      1      11200      33000      1995-03-02   11     61
      2      11200      33000      1995-03-03    9     nan
      3      23400      45000      1995-03-01   50     nan
      4      23400      45000      1995-03-03   49     nan
      5      33000      55000      1995-03-01   60     nan
      6      33000      55000      1995-03-02   61     nan

我敢肯定这不是太难,但不知何故我不明白。非常感谢您的任何帮助。

标签: pythonpandas

解决方案


单程:

df['price2'] = df[['Identifier2', 'date']].apply(tuple, 1).map(df.set_index(['Identifier','date'])['price'].to_dict())

输出:

   Identifier  Identifier2       date  price  price2
0       11200        33000 1995-03-01     10    60.0
1       11200        33000 1995-03-02     11    61.0
2       11200        33000 1995-03-03      9     NaN
3       23400        45000 1995-03-01     50     NaN
4       23400        45000 1995-03-03     49     NaN
5       33000        55000 1995-03-01     60     NaN
6       33000        55000 1995-03-02     61     NaN

推荐阅读