我有 2 個熊貓資料框:
df_test_values
column1 | col_values
0 | 0.99
3 | 0.21
1 | 0.55
df_reference_values
column1 | column2 | column3 ..... column100
0 | 0.80 | 0.21 |
3 | 0.22 | 0.11 |
1 | 0.11 | 0.33 |
考慮到我有一個常量值permitted_deviation并且column1在兩個資料幀中都相同(相同的值和行數)
如何將df_test_values'scol_values中的所有行與所選列中的所有行進行比較
,df_reference_values并確定其值中有多少在我的變數中permitted_deviation?
輸入將column_name用于df_reference_values和permitted_deviation
輸出可能是這樣的:“column_name在范圍內有 100 個值permitted_deviation”
任何輸入/想法表示贊賞。
uj5u.com熱心網友回復:
第一個建議基于推斷您希望根據允許的偏差單獨評估每一列,而不是匯總所有列。
(df_test_values["col_values"] - df_reference_values["column2"]).abs().apply(lambda x: 1 if x < permitted_deviation else 0).sum()
它使用 apply 函式,該函式可能會對大型資料幀產生性能問題,但提供了一種單行方式來計算滿足條件的記錄數。我包括了偏差的絕對值,認為您關心差異的大小而不是方向,因此根據需要進行相應調整。
這還假設您的 2 個資料框中的行具有相同的行數(您指出),并且它們的行順序完全相同。看起來“column1”可能是標識相應行的索引,如果是這樣,您需要確保它們以相同的順序排序。
這是另一種變體,它單獨對每列執行比較和計數,但同時進行,并且還確保兩個原始資料幀都按 column1 排序,假設它適合作為行的索引:
df_reference_values.set_index("column1").sort_index() \
.subtract(df_test_values.set_index("column1").sort_index()["col_values"], axis="index") \
.abs() \
.where(lambda x: x < permitted_deviation) \
.count()
這是在所有列之間執行比較的另一個變體,因此在每一行中,所有列都必須滿足您的條件,才能將該行計為“通過”:
df_reference_values.set_index("column1").sort_index() \
.subtract(df_test_values.set_index("column1").sort_index()["col_values"], axis="index") \
.abs() \
.where(lambda x: x < permitted_deviation) \
.dropna() \
.shape[0]
uj5u.com熱心網友回復:
不是單行答案,而是似乎有效的答案......
import pandas as pd
import io
...
df1 = pd.read_csv(io.StringIO("""column1|col_values
0 | 0.99
3 | 0.21
1 | 0.55
"""), delimiter="|",skipinitialspace=True)
df2 = pd.read_csv(io.StringIO("""column1| column2| column3|column4
0 | 0.80 | 0.21 | 0.98
3 | 0.22 | 0.11 | 0.15
1 | 0.11 | 0.33 | 0.5
"""),delimiter="|",skipinitialspace=True)
...
permitted_deviation = 0.1
count = 0
for c in df2.columns[1:]:
ddf = df2[["column1",c]].merge(df1,on="column1")
ddf[c "_within"] = (ddf[c] > ddf.col_values-permitted_deviation) & (ddf[c] < ddf.col_values permitted_deviation)
count = ddf[c "_within"].sum()
(根據需要調整>to>=等)。def.columnx_within是一個布爾列,sum()它回傳 True 欄位的數量。請注意,這df.columns[1:]意味著索引/交叉參考列是第一列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/392868.html
上一篇:在Keras中使用model.predict時出現維度錯誤
下一篇:在字串串列中查找公共字符
