我知道这个问题有一个简单、优雅的解决方案,但我正在努力寻找它。我想要做的就是根据日期和 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.melt
与 pd.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/