![](/img/trans.png)
[英]Pandas merge dataframes and update Only one Column from Second 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_1
和data_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_1a
和data_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_1a
和data_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.