問題
我的第一個DataFrame 包含以下內容:
df1 = pd.DataFrame(
[[1, 'C_A'], [2, 'C_B'], [3, 'C_C'], [3, 'C_D'], [4, 'C_F']],
columns=['time', 'category']
)
time category
0 1 C_A
1 2 C_B
2 3 C_C
3 3 C_D
4 4 C_F
有一些行有多個時間條目。
現在我的第二個 df 是每個類別的每個時間的概率分布:
df2 = pd.DataFrame(
[[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.],
[0., 0., 0.7, 0.3, 0.], [1, 0., 0., 0., 0.]],
columns=['C_A', 'C_B', 'C_C', 'C_D', 'C_F']
)
C_A C_B C_C C_D C_F
0 1.0 0.0 0.0 0.0 0.0
1 0.0 1.0 0.0 0.0 0.0
2 0.0 0.0 0.7 0.3 0.0
3 1.0 0.0 0.0 0.0 0.0
對于一次的行,我想保持原樣。
但是,例如,對于第3行和第 4行,df1我想只保留多行中的 1 行,成為概率最高的行。
最終結果將是:
pd.DataFrame(
[[1, 'C_A'], [2, 'C_B'], [3, 'C_C'], [4, 'C_F']],
columns=['time', 'category']
)
time category
0 1 C_A
1 2 C_B
2 3 C_C
3 4 C_F
問題
如何在它們出現時折疊這些多行,并根據我的其他 DataFrame 以最大概率保留該行?
uj5u.com熱心網友回復:
你想從中提取值(概率)df2使用df1.time的指標,df2.category為列。然后,您可以對值進行排序并洗掉重復項。
第一步基本上是棄用lookup函式的情況。您可以改用 numpy 索引:
row_idx, col_idx = df2.index.get_indexer(df1.time-1), df2.columns.get_indexer(df1.category)
(df1.assign(prob=df2.to_numpy()[row_idx, col_idx])
.sort_values(['time', 'prob'])
.drop_duplicates('time', keep='last')
)
輸出:
time category prob
0 1 C_A 1.0
1 2 C_B 1.0
2 3 C_C 0.7
4 4 C_F 0.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408926.html
標籤:
上一篇:相對于groupby移動值
下一篇:使用R創建完全對立的繪圖
