Python Pandas - 通过将标签与列匹配来将一个数据框的值添加到另一个数据框中

标签 python pandas dataframe

我知道这个问题有一个简单、优雅的解决方案,但我正在努力寻找它。我想要做的就是根据日期和 PN,使用 df2 中的相应值向 df2 添加第三列。 df2 中可能存在与 df1 不匹配的值,反之亦然(在没有匹配的地方填充 NaN)。

df1:

       2017-11-01  2017-11-02  2017-11-03
PN                                                                              
90020       105.0       105.0       105.0
90022       100.0       100.0       100.0 
90061        -3.0        -3.0        -3.0 
90065        30.0        30.0        30.0
90099         2.0         2.0         2.0

df2:

     PN       Date
4   90020 2017-11-01
9   90020 2017-11-02
12  90061 2017-11-01
13  90065 2017-11-02
17  94008 2017-11-03

期望的结果:

     PN       Date      Value
4   90020 2017-11-01    105.0
9   90020 2017-11-02    105.0
12  90061 2017-11-01    -3.0
13  90065 2017-11-02    30.0
17  94008 2017-11-03    NaN

最佳答案

如前所述,您可以将 pd.meltpd.merge 结合使用。

请记住reset_index 将您的索引提升到列,然后对齐列名。

df1 = pd.melt(df.reset_index(), id_vars=df.index.name)\
        .rename(columns={'variable': 'Date'})

res = pd.merge(df2, df1, how='left')

#       PN        Date  value
# 0  90020  2017-11-01  105.0
# 1  90020  2017-11-02  105.0
# 2  90061  2017-11-01   -3.0
# 3  90065  2017-11-02   30.0
# 4  94008  2017-11-03    NaN

维护df2索引:

res = df2.reset_index()\
         .merge(df1, how='left')\
         .set_index('index')

#           PN        Date  value
# index                          
# 4      90020  2017-11-01  105.0
# 9      90020  2017-11-02  105.0
# 12     90061  2017-11-01   -3.0
# 13     90065  2017-11-02   30.0
# 17     94008  2017-11-03    NaN

关于Python Pandas - 通过将标签与列匹配来将一个数据框的值添加到另一个数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49737588/

相关文章:

python - 在元组的元组中查找最大值和最小值

python - 在python中将带有子字段的Json转换为CSV

python - 在 for 循环中搜索字符串,而不在循环中单独引用每个字符串

python - 使用 pandas DataFrame 将 python 字典导出到 .csv 文件时如何解决(我认为是)编码问题?

Python:json.loads 返回以 'u' 为前缀的项目

python - 0.5秒后如何在python 2.4中发出警报信号

Python Pandas : dynamic concatenation from get_dummies

python - Pandas :在x轴上绘制时间直方图

python - 通过另一个数据帧过滤系列/数据帧

r - 平均值 (SD) 表