我有兩個具有完全相同索引和列的資料框。它們的某些值不同,我想生成一個具有相同索引和列的新資料框,但每個單元格都指示兩個資料框之間的比較結果。
資料框 1:
2018 2019 2020
A 1 1 1
B 0 1 2
C 2 0 0
資料框 2:
2018 2019 2020
A 1 0 0
B 0 1 1
C 1 1 1
本質上,我試圖將以下函式應用于具有相同索引和相同列的兩個資料幀中的每一對單元格,然后將比較結果映射到同一位置的新資料幀:
def compare_two(cell_1, cell_2):
if cell_1 == cell_2:
return "same"
elif cell_1 == 0 and cell_2 > 0:
return "rise"
elif cell_2 == 0 and cell_1 > 0:
return "fall"
elif cell_1 * cell_2 == 2:
return "change"
結果資料框應如下所示:
2018 2019 2020
A same fall fall
B same same change
C change rise rise
我應該如何實作這一目標?
uj5u.com熱心網友回復:
一種使用方式numpy.select:
data = np.select([df1.eq(df2),
df1.eq(0) & df2.gt(0),
df2.eq(0) & df1.gt(0),
df1.mul(df2).eq(2)],
["same", "rise", "fall", "change"])
new_df = pd.DataFrame(data, columns = df1.columns, index=df1.index)
print(new_df)
輸出:
2018 2019 2020
A same fall fall
B same same change
C change rise rise
uj5u.com熱心網友回復:
您可以使用np.wherewith np.logicfunction 來替換您的功能的其他方式
result_data = np.where(df1==df2,'Same',
np.where(np.logical_and(df1==0 ,df2>0),"rise",
np.where(np.logical_and(df2==0 , df1>0),"fall",
np.where(df1*df2==2,"change",""))))
result = pd.DataFrame(result_data,index=df1.index,columns=df1.columns)
輸出
2018 2019 2020
A Same fall fall
B Same Same change
C change rise rise
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408943.html
標籤:
