我有兩個熊貓數據框,我想與規則結合使用。如何將兩個熊貓數據框與條件結合?
這是第一個數據幀
import pandas as pd
df1 = pd.Dataframe()
df1
rank begin end labels
first 30953 31131 label1
first 31293 31435 label2
first 31436 31733 label4
first 31734 31754 label1
first 32841 33037 label3
second 33048 33456 label4
....
第二數據幀是僅兩列,rank
和start
df2
rank start
first 31333
first 31434
first 33039
first 33123
first 33125
在第一數據幀df1
,所述數據具有begin
和end
。我想檢查df2
中的開始整數是否在這個範圍內。
下面是最終的結果應該是這樣的:
result
rank start labels
first 31333 label2
first 31434 label2
first 33039 NaN
first 33123 label4
first 33125 label4
的start==31333
是df1
與label = label2
到31435
範圍31293
之間。整數31434
也在範圍31293:31435
之間,所以它也被註釋爲label2
。值33039
不在df2
之間的任何區間之間,因此它獲得NaN
值。
由這些dataframes被組合的規則是這樣的:
(df2.start >= df1.begin) & (df2.start <= df1.end)
但同時,每行必須在相同的秩值,例如匹配每行必須匹配此條件的第一個或第二個字符串。
下面是我用這兩個dataframes結合的代碼,但它不會在所有規模非常好:
from numpy import nan
def between_range(row):
subset = df1.loc[(row["rank"] == df1.rank) & (row.start >= repeats.start) & (row.start <= repeats.end), :]
if subset.empty:
return np.nan
return subset.labels
有另一種方式與合併(也許秩)來做到這一點?任何其他基於熊貓的解決方案?
@Kartik我試圖簡化這裏的問題。感謝您的幫助 – EB2127
@MaxU我已經更新了上述內容。任何想法如何擴展/工作? – EB2127