我试图理解为什么合并功能会复制值。
>>> c2.head()
Out[42]:
Bin Date/Time val
A 10/31/2017 15:53:57 0.77
A 10/31/2017 15:53:57 0.75
A 10/31/2017 15:53:57 0.79
A 10/31/2017 15:53:57 0.67
A 10/31/2017 15:53:57 0.72
>>> c1.head()
Out[44]:
Bin Date/Time code
A 10/31/2017 15:53:57 BYM
A 10/31/2017 15:53:57 CFS
A 10/31/2017 15:53:57 DFZ
A 10/31/2017 15:53:57 HKN
A 10/31/2017 15:53:57 RBF
我需要在Bin和Datetime上合并这两个。
>>> c= c1.merge(c2, on =['Bin','Date/Time'], how= 'left')
>>> c.head()
Out[50]:
Bin Date/Time Code Val
A 10/31/2017 15:53:57 BYM 0.77
A 10/31/2017 15:53:57 BYM 0.77
A 10/31/2017 15:53:57 BYM 0.77
A 10/31/2017 15:53:57 BYM 0.77
A 10/31/2017 15:53:57 BYM 0.77
因此c对同一个bin / datetime有多个条目。我认为也许日期时间值看起来相同但不同。但事实并非如此。
>>> c1['Date/Time'].iloc[0]
Out[46]: u'10/31/2017 15:53:57'
>>> c2['Date/Time'].iloc[0]
Out[47]: u'10/31/2017 15:53:57'
>>> c1['Date/Time'].iloc[0]==c2['Date/Time'].iloc[0]
Out[48]: True
此外,即使日期时间不同,每个bin / datetime也应该只有2行。知道这里可能会发生什么吗?
我的预期输出是:
Bin Date/Time Code Val
A 10/31/2017 15:53:57 BYM 0.77
A 10/31/2017 15:53:57 CFS 0.75
A 10/31/2017 15:53:57 DFZ 0.79
A 10/31/2017 15:53:57 HKN 0.67
A 10/31/2017 15:53:57 RBF 0.72
答案 0 :(得分:1)
由于val
中的唯一c2
,会发生重复值。
简化示例:
>>> c1.head(1)
Bin Date/Time code
0 A 2017-10-31 15:53:57 BYM
将这一行合并到c2
:
>>> c1.head(1).merge(c2, on=['Bin','Date/Time'], how='left')
Bin Date/Time code val
0 A 2017-10-31 15:53:57 BYM 0.77
1 A 2017-10-31 15:53:57 BYM 0.75
2 A 2017-10-31 15:53:57 BYM 0.79
3 A 2017-10-31 15:53:57 BYM 0.67
4 A 2017-10-31 15:53:57 BYM 0.72
您正在合并两个键['Bin','Date/Time']
和c1中的每个code
,它会从c2中引入每个唯一val
。
答案 1 :(得分:0)
您似乎不需要合并。如果2个数据帧具有相同的大小和索引,那么您可以简单地将一个系列分配给另一个:
c1.val = c2.val
有时,您可能希望将多个系列从一个数据框复制到另一个数据框。这可以通过combine_first
:
c1.combine_first(c2)
在常见索引的情况下,这优先考虑c1
,但如果唯一的区别是一个数据帧有一个额外的列,则无关紧要。
如果索引不同,您可能希望在上述任何一种方法之前通过.reset_index()
重新对齐它们。