对于某些测量的后处理,我有三个大熊猫数据帧,如下所示:
df1:
direction sequence timestamp remote_timestamp delta
0 U 1 461945 -1 -1
1 U 2 462106 -1 -1
2 U 3 462269 -1 -1
.. ... ... ... ... ...
97 U 98 477601 -1 -1
98 U 99 477762 -1 -1
99 U 100 477924 -1 -1
df2:
direction sequence timestamp remote_timestamp delta
0 U 101 500663 -1 -1
1 U 102 500829 -1 -1
2 U 103 501000 -1 -1
.. ... ... ... ... ...
98 U 199 516631 -1 -1
99 U 200 516792 -1 -1
df3
direction sequence timestamp remote_timestamp delta
0 U 1 -1 462791 -1
1 U 2 -1 462791 -1
2 U 3 -1 462894 -1
.. ... ... ... ... ... ...
197 U 198 -1 525099 -1
198 U 199 -1 525100 -1
199 U 200 -1 525100 -1
所以我有两个具有100行的数据帧,一个具有200行的数据帧。现在,我想将第三个数据帧的“ remote_timestamp”列写入其序号位置的第一个和第二个数据框中。
对于任何一个框架,我都尝试过这样的操作:
df1['remote_timestamp'] = numpy.where(df1['sequence'].values == df3['sequence'].values,df3['remote_timestamp'],-1)
但是由于数据帧的长度不匹配,我得到了:
ValueError: Length of values does not match length of index
解决问题的方法是什么。也许numpy.where
不是理想的解决方案。
谢谢
答案 0 :(得分:0)
如果将“序列”列更改为第三个数据帧的索引,则可以直接访问所需的数据。下面的代码应该可以工作,但是我无法根据您给我们的内容重现您的示例
df3.set_index('sequence')
new_values=df3['remote_timestamp'].loc[df1['sequence']]
df1['remote_timestamp']=new_values
我自己做了一个可复制的示例,它看起来运行良好
df=pd.DataFrame({'a':[1,2,3,4,5]})
df2=pd.DataFrame({'a':[1,2,3,4,5,6,7,8,9,10],'b':[0,9,8,7,6,5,4,3,2,11]})
df.set_index('a')
df2['b'].loc[df['a']]
输出
1 9
2 8
3 7
4 6
5 5
Name: b, dtype: int64
希望这会有所帮助!并研究制作更小的可复制示例。它不仅可以帮助我们解决您的问题,而且在简化事情和制作小型测试用例时,我经常会解决自己的问题-
答案 1 :(得分:0)
如果df3中的sequence
没有重复,请使用Series.map
df1['remote_timestamp']=df1['sequence'].map(df3.set_index('sequence')['remote_timestamp'])
df2['remote_timestamp']=df2['sequence'].map(df3.set_index('sequence')['remote_timestamp'])