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