繁体   English   中英

如何合并 Pandas 中的两个不同大小的 DataFrame 以更新一个 dataframe 取决于一列中的部分值与另一列 dataframe 的匹配

[英]How to merge two different size DataFrames in Pandas to update one dataframe depends on matching partial values in one column with another dataframe

我正在尝试为工作编写任务代码,因此我制作了一个模拟此任务的简单案例。 我有两个数据帧: data_1data_2 ,我想通过匹配名为time的列中的值的条件,用data_1中的行替换data_2中的一些行。

这是一个例子:

import numpy as np
import pandas as pd
a = {
    'time':[1,2,3,4,5,6],
    'column_1':[2,2,2,2,2,2],
    'column_2':[3,3,3,3,3,3]   
}
b = {
    'time':[3,4,5],
    'column_1':[0,0,0],
    'column_2':[0,0,0]    
}
data_1 = pd.DataFrame(a)
data_2 = pd.DataFrame(b)

结果,我想这样得到 dataframe:

time   column_1   column_2
0   1   2   3
1   2   2   3
2   3   0   0
3   4   0   0
4   5   0   0
5   6   2   3

我尝试了Pandas中的merge和replace方法,但是没有成功。 我做了掩码 boolean 阵列:

time_1 = list(data_1['time'])
time_2 = list(data_2['time'])
mask_array = np.zeros(len(time_1),dtype = bool)
for i, item in enumerate(time_1):
    if item in time_2:
        mask_array[i] = True

我收到了:

array([False, False,  True,  True,  True, False])

但我无法用data_1值替换data_2值。 我做错什么了? 这似乎不是一项艰巨的任务,但我找不到任何有用的东西,只是不知道该怎么做。 我对 pandas 没有太多经验,所以也许我不明白某些事情。

您可以在data_1adata_1b上按time设置索引后使用.update() ,如下所示:

data_1a = data_1.set_index('time')
data_1a.update(data_2.set_index('time'))
data_out = data_1a.reset_index()

.update()使用来自另一个 DataFrame 的非 NA 值就地修改。对齐索引。 因此,当您将time设置为data_1adata_1b的索引时, .update()对齐列time中的匹配值,以通过data_1的相应值执行data_2的更新。

数据设置:

a = {
    'time':[1,2,3,4,5,6],
    'column_1':[2,2,2,2,2,2],
    'column_2':[3,3,3,3,3,3]   
}
b = {
    'time':[3,4,5],
    'column_1':[0,0,0],
    'column_2':[0,0,0]    
}
data_1 = pd.DataFrame(a)
data_2 = pd.DataFrame(b)

结果:

print(data_out)

   time  column_1  column_2
0     1       2.0       3.0
1     2       2.0       3.0
2     3       0.0       0.0
3     4       0.0       0.0
4     5       0.0       0.0
5     6       2.0       3.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM