1
認爲我有兩個pandas DataFrame
S作爲如下,Python的大熊貓合併兩個DataFrames具有條件邏輯
df_actual
ID NAME PRODUCT CHANNEL ACTUAL
1 A W G 233
1 A W M 4
1 A X G 188
1 A X M 4
1 A Y G 37
1 A Y M 4
1 A Z G 272
1 A Z M 4
和df_target
ID NAME PRODUCT TARGET
1 A W 289
1 A X 253
1 A Y 36
1 A Z 334
我期望得到的結果如下,
ID NAME PRODUCT CHANNEL ACTUAL TARGET
1 A W G 233 284 <<< 289 * (233/(233+4))
1 A W G 4 5 <<< 289 * (4/(233+4))
1 A X G 188 248 <<< 253 * (188/(248+5))
1 A X G 4 5 <<< 253 * (4/(248+5))
1 A Y M 37 32 …
1 A Y M 4 4 …
1 A Z M 272 329 …
1 A Z M 4 5 …
所以基本上我想要做的,在df_actual
中增加一個新列,名爲TARGET
。爲了計算列TARGET
內的值,
- 我得在
df_actual
的ACTUAL
值一定ID
,NAME
,PRODUCT
和CHANNEL
,然後拿到TARGET
值df_target
爲同一ID
,NAME
和PRODUCT
。 - 然後使用每個
CHANNEL
的貢獻與總CHANNEL
某些ID
,NAME
和PRODUCT
計算每個CHANNEL
新TARGET
值。
例如,以獲得新的TARGET
值ID
1,NAME
A,PRODUCT
W,和CHANNEL
G,I需要使用此公式289 *(233 /(233 + 4))。
- 289來自
TARGET
值df_target
。 - 233來自對
CHANNEL
ģ 在
- 4來自於
CHANNEL
中號 在
df_actual
的
ACTUAL
值
df_actual
的
ACTUAL
值
我的真實數據是相當龐大,超過1個百萬行。所以如果你能提出矢量化解決方案,我會非常感激。儘管如此,任何建議將不勝感激。謝謝。
很好的解決方案;) – jezrael
@jezrael,謝謝:) – MaxU
謝謝!這正是我正在尋找的。整潔,優雅,快速!再一次,非常感謝你! – arnold