![](/img/trans.png)
[英]how do i compare date columns in two different data frames based on the same ID
[英]How to compare two data frames of different size based on a column?
我有兩個不同大小的數據框
df1
YearDeci Year Month Day ... Magnitude Lat Lon
0 1551.997260 1551 12 31 ... 7.5 34.00 74.50
1 1661.997260 1661 12 31 ... 7.5 34.00 75.00
2 1720.535519 1720 7 15 ... 6.5 28.37 77.09
3 1734.997260 1734 12 31 ... 7.5 34.00 75.00
4 1777.997260 1777 12 31 ... 7.7 34.00 75.00
和
df2
YearDeci Year Month Day Hour ... Seconds Mb Lat Lon
0 1669.510753 1669 6 4 0 ... 0 NaN 33.400 73.200
1 1720.535519 1720 7 15 0 ... 0 NaN 28.700 77.200
2 1780.000000 1780 0 0 0 ... 0 NaN 35.000 77.000
3 1803.388014 1803 5 22 15 ... 0 NaN 30.600 78.600
4 1803.665753 1803 9 1 0 ... 0 NaN 30.300 78.800
5 1803.388014 1803 5 22 15 ... 0 NaN 30.600 78.600.
1.我想根據“YearDeci”列比較 df1 和 df2。 並找出常見條目和唯一條目(常見行以外的行)。
2.output 基於列“YearDeci”的 df1 中的公共行(相對於 df2)。
3.output 基於列“YearDeci”的 df1 中的唯一行(相對於 df2)。
*注意:“YearDeci”中十進制值的差異高達+/-0.0001是可以容忍的
預期的 output 就像
row_common=
YearDeci Year Month Day ... Mb Lat Lon
2 1720.535519 1720 7 15 ... 6.5 28.37 77.09
row_unique=
YearDeci Year Month Day ... Magnitude Lat Lon
0 1551.997260 1551 12 31 ... 7.5 34.00 74.50
1 1661.997260 1661 12 31 ... 7.5 34.00 75.00
3 1734.997260 1734 12 31 ... 7.5 34.00 75.00
4 1777.997260 1777 12 31 ... 7.7 34.00 75.00
首先比較df1.YearDeci和df2.YearDeci的“每個與每個”原則。 要進行比較,請使用np.isclose function 和假定的絕對公差。
結果是一個boolean數組:
然后,使用np.argwhere ,找到True值的索引,即來自df1和df2的“相關”行的索引,並從中創建一個 DateFrame。
執行上述操作的代碼是:
ind = pd.DataFrame(np.argwhere(np.isclose(df1.YearDeci[:, np.newaxis],
df2.YearDeci[np.newaxis, :], atol=0.0001, rtol=0)),
columns=['ind1', 'ind2'])
然后,讓索引對指向兩個 DataFrame 中的“相關”行,執行以下合並:
result = ind.merge(df1, left_on='ind1', right_index=True)\
.merge(df2, left_on='ind2', right_index=True, suffixes=['_1', '_2'])
最后一步是刪除兩個“輔助索引列”( ind1和ind2 ):
result.drop(columns=['ind1', 'ind2'], inplace=True)
結果(分為2部分)是:
YearDeci_1 Year_1 Month_1 Day_1 Magnitude Lat_1 Lon_1 YearDeci_2 \
0 1720.535519 1720 7 15 6.5 28.37 77.09 1720.535519
Year_2 Month_2 Day_2 Hour Seconds Mb Lat_2 Lon_2
0 1720 7 15 0 0 NaN 28.7 77.2
公共行的索引已經在變量 ind 中
所以要找到唯一的條目,我們需要做的就是根據“ind”中的索引從df1中刪除公共行所以最好讓另一個CSV文件包含公共條目並將其讀取到變量中。
df1_common = pd.read_csv("df1_common.csv")
df1_uniq = df1.drop(df1.index[ind.ind1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.