我有一个dataframe(df1)如下:

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

我还有另一个dataframe(df2)如下:

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 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

提前致谢!

我认为您需要在loc之前添加NaN,然后在左侧联接中添加merge:

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

谢谢,the年如何?如果2016年2月为29,2015年2月为29。如果2015年2月没有29。2016年2月的28和29相同

嗯,所以您每个月需要30天,而没有2月(28,29)?还是在每个月的最后一天需要nans(28,29,30,31)?

谢谢,我的意思是2016年是leap年,2月是29,但是2015年没有2月29日。在这种情况下,如果去年没有29,则2月29日的数据与的数据相同。 2月28日

好的,对不起,我忘了您的评论。一月有31天,您还需要选择30天吗?二月明白了。三月也是31 ...所以还需要选择30?谢谢。

感谢您的宝贵意见。我的意思是考虑the年(仅考虑2月)。例如,如果要获取2016年2月29日的一年前的数据(即2015年2月29日),则2016年为a年。但是由于它不是a年,因此没有2015年2月29日的数据。在这种情况下,2016年2月29日一年前的数据与2016年2月28日相同。

谢谢,我已经通过f_tr2.index [i]-pd.offsets.DateOffset(years = 1)解决了,您之前已经回答过。还是谢谢你!

感谢您的评论。我的主要问题是我不明白,为什么要减去一年零一天?你能解释一下吗?

谢谢,我还没有详细解释。但是,在检查完我的答案代码后(我将发布答案),您将理解它。

确实我有相同的想法-代码可以提供帮助。如果可能的话,我尝试优化它...

也可能是因为您的代码有必要使用更大的数据框,可以免费使用我的数据示例并在必要时进行更改。

谢谢,我的代码花了更多时间。你能优化一下吗

但是没有30天有什么问题。您能再解释一下吗?

请稍候,我上传了其他代码

我已经上传了有关此问题的新答案,但要花更多的时间(如果可能),因为我使用了循环,因此您可以对其进行优化

您能否测试样本数据是否可用于您的解决方案-我将其添加到您的答案中。

谢谢,你真好!

是的,这并不容易,但我很高兴它能奏效。祝好运!

嗨@jezrael,有一个问题:stackoverflow.com/questions/44946555/

您好@jezrael,有一个问题:stackoverflow.com/questions/45564867/谢谢!

您是否需要NaN? df = df.shift(1, freq=D)不起作用?

很好回答的人;)

@c ??? s ???? - 谢谢 :)

为什么不只删除df1中与df2中的(m, d)对不匹配的行?

df_new = df2.drop(df2[(not ((df2.m == df1.m) & (df2.n == df1.n)).any()) or (df2.index % 30 == 0)].index)

或类似的规定。

链接到相关答案。

我对Pandas不太熟悉,也没有测试上面的示例。

感谢您的评论,condition2怎么样:如果df2索引%30 == 0的索引,我们不合并它

是的,感谢您指出@ tktktk0711

df_te是df2

df_tr_2014是df1

7d 15d 20分别是1d 2d 3d。 size_df_te是df_te的长度,month和day_m是m,d在df2中

df_te['7d'] = 0

df_te['15d'] = 0

df_te['20d'] = 0

mj = 0

dj = 0

for i in range(size_df_te):

if i%30 != 0:

m = df_te.loc[i,'month']

d = df_te.loc[i,'day_m']

if (m== 2) & (d == 29):

m = 2

d = 28

dk_7 = df_tr_2014.loc[(df_tr_2014['month']==m) & (df_tr_2014['day_m']==d)]['7d']

dk_15 = df_tr_2014.loc[(df_tr_2014['month']==m) & (df_tr_2014['day_m']==d)]['15d']

dk_20 = df_tr_2014.loc[(df_tr_2014['month']==m) & (df_tr_2014['day_m']==d)]['20d']

df_te.loc[i,'7d'] = float(dk_7)

df_te.loc[i,'15d'] = float(dk_15)

df_te.loc[i,'20d'] = float(dk_20)

编辑:

样本数据:

np.random.seed(10)

N = 365

rng = pd.date_range('2014-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 = 365

rng = pd.date_range('2015-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.head())

python两个数据框合并_关于python 2.7:python2 pandas:如何将另一个数据框的一部分合并到一个数据框...相关推荐

  1. python 两个乘号是什么_(2)Python 变量和运算符

    一.python变量特点 python是弱类型语言,无需声明变量可以直接使用并且变量的数据类型可以动态改变 二.变量命名规则 1.不能使用python关键字 2.不能数字开头 3.不能包含空格 4.不 ...

  2. python两个list取交集_使用 Python 获取两个列表的交集、并集、差集的常用方法 | Jin''''s Blog...

    在数据处理中经常需要使用 Python 来获取两个列表的交集,并集和差集.在 Python 中实现的方法有很多,我平时只使用一两种我所熟悉的,但效率不一定最高,也不一定最优美,所以这次想把常用的方法都 ...

  3. python两台电脑文件传输_两行python代码实现一个http服务器,告别文件传输烦恼...

    如果你有一个文件需要在两台Linux服务器上进行传输,你会怎么办? 如果你要将Linux服务器上的文件传给不会编程的产品经理,你又会怎么办? 1.问题引入 不知道大家有没有遇到过这样的问题: 在实际的 ...

  4. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  5. python求两数之和的命令_数学建模:科学计算Python2小时-Python基础

    这一部分主要面向数模活动中的python基础知识进行讨论 作者 系列文章(科学计算Python2小时)目录:李似:科学计算Python2小时-前言与目录​zhuanlan.zhihu.com 首先要说 ...

  6. python数据可视化代码_用Python代码实现5种最好的、简单的数据可视化!

    数据可视化是数据科学家工作的重要组成部分.在项目的早期阶段,您通常会进行探索性数据分析(EDA)以获得对数据的一些见解.创建可视化确实有助于使事情更清晰.更容易理解,尤其是对于更大.更高维度的数据集. ...

  7. python处理数据的包_在Python中利用Into包整洁地进行数据迁移的教程

    动机 我们花费大量的时间将数据从普通的交换格式(比如CSV),迁移到像数组.数据库或者二进制存储等高效的计算格式.更糟糕的是,许多人没有将数据迁移到高效的格式,因为他们不知道怎么(或者不能)为他们的工 ...

  8. python文本框清空_用Python制作mini翻译器

    来源:http://suo.im/5ZI20R 1. 实例描述 在平时编程的过程中,会经常在网上翻译一些单词,本文使用Python制作一款翻译小工具,不仅可以自己用,还可以嵌入到程序当中.运行程序,效 ...

  9. python处理nc文件并输出_利用python如何处理nc数据详解

    前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是"知难行易"还是"知易行难"都不能充分的说明问题,还是& ...

  10. python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)

    原标题 Understanding Python Dataclasses?-?Part 2 ,作者为 Shikhar Chauhan . 这是 Python 最新的 Dataclasses 系列的第二 ...

最新文章

  1. 如何将重复的数据标红_python如何处理重复值数据?
  2. Windows Mobile使用Shared Memory(共享内存)进行IPC(进程间通信)的开发
  3. matlab里performance,关于神经网络performance图的问题
  4. Linux下Mysql数据库的基础操作
  5. 【Android工具】speedtest网速测试工具(4.1.5)安卓网速测试去广告高级版
  6. wxWidgets:wxAuiManagerEvent类用法
  7. tcp_handle_req: Made 4 read attempts but message is not complete yet - closing connection
  8. Docker container与宿主进程相互隔离的实现原理
  9. Canvas事件绑定
  10. ServletConfig对象和ServletContext对象配置初始化参数
  11. VC开发过程中数据类型不兼容的问题
  12. SDRAM之持续中。。。。。。
  13. linux 字符驱动 tty,打通linux的tty驱动的数据链路
  14. SAP WBS预算可通过二种方式配置和使用
  15. GT9xxxxx系列------如何加入电源管理模块
  16. 深度学习:卷积神经网络从入门到精通
  17. shader篇-立方体纹理
  18. PS学习总结三:修图必备的高阶操作
  19. 如何对自己定义的目标进行分解
  20. HTML学习笔记4:如何给网页添加图片和超链接

热门文章

  1. 连载《一个程序猿的生命周期》-《发展篇》- 23.两年多的时间,从孤家寡人到10多人的团体,经历了什么...
  2. 求10的7次方阶乘的位数
  3. 考研英语面试自我介绍
  4. 使用CD74HC4067制作16颗的流水灯
  5. Tryhackme-Boiler CTF
  6. 俞敏洪 同济大学演讲
  7. 升级到游戏设计师攻略之—— 用游戏编辑器制作MOD脱颖而出
  8. XRecyclerView上下拉使用
  9. 2021自动驾驶领域最具商业合作价值企业盘点
  10. 网络技术学习基础篇。