如何将数据框的某一列合并到另一列?

时间:2019-06-09 08:51:36

标签: python dataframe

我有一个数据框df,其日期为2003年1月1日至2017年6月30日:

       dates
0     2003-01-01
1     2003-01-02
2     2003-01-03
3     2003-01-04
4     2003-01-05
5     2003-01-06
...
5284  2017-06-20
5285  2017-06-21
5286  2017-06-22
5287  2017-06-23
5288  2017-06-24
5289  2017-06-25
5290  2017-06-26
5291  2017-06-27
5292  2017-06-28
5293  2017-06-29
5294  2017-06-30

现在我有了第二个数据帧dt2

  just_dates  Counts
0  2003-01-02      1
1  2015-10-31      1
2  2015-11-01     14
3  2015-11-02     17
4  2015-11-03     11
5  2015-11-04      3

如果某个日期存在且不是零,我想将数据帧dt2的计数写为dates中的新列。 所以我的预期输出是:

       dates       counts
0     2003-01-01     0
1     2003-01-02     1
2     2003-01-03     0
3     2003-01-04     0
4     2003-01-05     0
...
3523  2015-11-01     14
3524  2015-11-02     17
...
5293  2017-06-29     0
5294  2017-06-30     0

我尝试过这样的事情 df['counts']=df['dates'].isin(out['just_dates']).astype(int) 但这会给我一个零,如果日期存在或不存在,并且我想在“ counts”中包含相对数字。

1 个答案:

答案 0 :(得分:1)

您可以使用带有左联接的合并:

  

“左外部联接从表A产生完整的记录集,   表B中的匹配记录(如果有)。   匹配,则右侧将包含null。”

df = pd.merge(df, df2, how='left', left_on='dates', right_on='just_dates')

由于左外部联接将产生null / nan值,因此我们必须将其填充为0。我们还想删除多余的列:

df['Counts'].fillna(0, inplace=True)
df.drop(columns=['just_dates'], inplace=True)

使用inplace=True来实际更改列的内容。