python2 pandas:如何将另一个数据框的一部分合并到一个数据框 [英] python2 pandas: how to merge a part of another dataframe to a dataframe

查看:339
本文介绍了python2 pandas:如何将另一个数据框的一部分合并到一个数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个dataframe(df1)如下:

I have a dataframe(df1) as following:

       datetime     m  d    1d    2d   3d
       2014-01-01   1  1     2     2   3
       2014-01-02   1  2     3     4   3
       2014-01-03   1  3     1     2   3
       ...........
       2014-12-01  12  1      2     2   3
       2014-12-31  12  31     2     2   3

我还有另一个数据框(df2),如下所示:

Also I have another dataframe(df2) as following:

       datetime     m  d       
       2015-01-02   1  2     
       2015-01-03   1  3     
       ...........
       2015-12-01  12  1      
       2015-12-31  12  31     

我想将df1的1d 2d 3d列值合并到df2。
有两个条件:
(1)在df1和df2中,只有m和d相同,才能合并。
(2)如果df2索引%30 == 0的索引不合并,则这些索引的1d 2d 3d值可以为Nan。

I want to merge the 1d 2d 3d columns value of df1 to df2. There are two conditions: (1) only m and d are the same in both df1 and df2 can merge. (2) if the index of df2 index % 30 ==0 don't merge, the value of 1d 2d 3d of these index can be Nan.

I mean I want the new dataframe of df2 like as following:

       datetime     m  d    1d    2d   3d
       2015-01-02   1  2   Nan     Nan   Nan
       2015-01-03   1  3     1     2   3
       ...........
       2015-12-01  12  1      2     2   3
       2015-12-31  12  31     2     2   3

谢谢!

推荐答案

我认为您需要通过NaN s /pandas-docs/stable/generation/pandas.DataFrame.loc.html rel = nofollow noreferrer> loc ,然后 合并 加入:

I think you need add NaNs by loc and then merge with left join:

np.random.seed(10)
N = 365
rng = pd.date_range('2015-01-01', periods=N)
df_tr_2014 = pd.DataFrame(np.random.randint(10, size=(N, 3)), index=rng).reset_index()
df_tr_2014.columns = ['datetime','7d','15d','20d']
df_tr_2014.insert(1,'month', df_tr_2014['datetime'].dt.month)
df_tr_2014.insert(2,'day_m', df_tr_2014['datetime'].dt.day)
#print (df_tr_2014.head())

N = 366
rng = pd.date_range('2016-01-01', periods=N)
df_te = pd.DataFrame(index=rng)
df_te['month'] = df_te.index.month
df_te['day_m'] = df_te.index.day
df_te = df_te.reset_index()
#print (df_te.tail())
df2 = df_te.copy()
df1 = df_tr_2014.copy()







df1 = df1.set_index('datetime')
df1.index += pd.offsets.DateOffset(years=1)

#correct 29 February
y = df1.index[0].year
df1 = df1.reindex(pd.date_range(pd.datetime(y,1,1), pd.datetime(y,12,31)))
idx = df1.index[(df1.index.month == 2) & (df1.index.day == 29)]

df1.loc[idx, :] = df1.loc[idx - pd.Timedelta(1, unit='d'), :].values
df1.loc[idx, 'day_m'] = idx.day
df1[['month','day_m']] = df1[['month','day_m']].astype(int)

df1[['7d','15d', '20d']] = df1[['7d','15d', '20d']].astype(float)

df1.loc[np.arange(len(df1.index))  % 30 == 0, ['7d','15d','20d']] = 0
df1 = df1.reset_index()
print (df1.iloc[57:62])
        index  month  day_m   7d  15d  20d
57 2016-02-27      2     27  2.0  0.0  1.0
58 2016-02-28      2     28  2.0  3.0  5.0
59 2016-02-29      2     29  2.0  3.0  5.0
60 2016-03-01      3      1  0.0  0.0  0.0
61 2016-03-02      3      2  7.0  6.0  9.0

这篇关于python2 pandas:如何将另一个数据框的一部分合并到一个数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆