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