计算不同类型的开销-Pandas/Numpy-Python

计算不同类型的开销-Pandas/Numpy-Python,python,pandas,numpy,analysis,Python,Pandas,Numpy,Analysis,我有两个数据帧: df1 +------------+-------------+------+ | Product ID | Cost Method | Rate | +------------+-------------+------+ | 10 | CPM | 10 | | 20 | CPC | 0.3 | | 30 | CPCV | 0.4 | | 40 | FLF

我有两个数据帧:

df1
+------------+-------------+------+
| Product ID | Cost Method | Rate |
+------------+-------------+------+
|         10 | CPM         | 10   |
|         20 | CPC         | 0.3  |
|         30 | CPCV        | 0.4  |
|         40 | FLF         | 100  |
|         50 | VAD         | 0    |
|         60 | CPM         | 0.1  |
+------------+-------------+------+

df2
+--------+------------+-------------+--------+-----------------+
|  Date  | Product ID | Impressions | Clicks | Completed Views |
+--------+------------+-------------+--------+-----------------+
| 01-Jan |         10 |         300 |      4 |               0 |
| 02-Jan |         20 |          30 |      3 |               0 |
| 03-Jan |         30 |         200 |      4 |              20 |
| 02-Jan |         40 |         300 |      4 |               0 |
| 02-Jan |         40 |         500 |      4 |               0 |
| 03-Jan |         40 |         200 |      3 |               0 |
| 04-Jan |         90 |        3000 |      3 |               0 |
| 05-Jan |         50 |        3000 |      5 |               0 |
+--------+------------+-------------+--------+-----------------+
理想的输出是:

 +--------+------------+-------------+--------+-----------------+--------+
|  Date  | Product ID | Impressions | Clicks | Completed Views | Spend  |
+--------+------------+-------------+--------+-----------------+--------+
| 01-Jan |         10 |         300 |      4 |               0 |  $3    |
| 02-Jan |         20 |          30 |      3 |               0 |  $1    |
| 03-Jan |         30 |         200 |      4 |              20 |  $8    |
| 02-Jan |         40 |         300 |      4 |               0 |  $50   |
| 02-Jan |         40 |         500 |      4 |               0 |  $50   |
| 03-Jan |         40 |         200 |      3 |               0 |  $-    |
| 04-Jan |         90 |        3000 |      3 |               0 |  $-    |
| 05-Jan |         50 |        3000 |      5 |               0 |  $-    |
+--------+------------+-------------+--------+-----------------+--------+
其中:

  • 如果某个ID无法匹配,则通过其ID匹配产品,然后 产品支出按0计算
  • 其中,FLF计算为 每天对该产品的总印象的总和,以及 超过某个最低限度,例如600次印数,则 应用。如果同一天有两个或多个条目,则 该比率除以它在列表中出现的次数 当天
  • 其中,如果产品为VAD,则支出为0
  • 其中,CPC计算为点击次数乘以点击率
  • 其中,CPM计算为费率*(印象/1000)

  • 即使我真的不应该回答你,我也要回答你。你是新的堆栈溢出(SO),所以让这是一个教育性的文章。请放心,这篇文章的语气并不是试图居高临下或苛刻


    首先,要问一个恰当的问题(请阅读),你需要做两件事:

    • 解释您尝试了什么(提供一个代码示例!),并解释您的问题所在。你的问题在当前的格式中肯定不符合要求。里面有5到6个完全不同的东西,感觉就像你在请别人做你的家庭作业
    • 提供一个可行的例子
    对于一个可行的例子,您已经这样做了,但是您选择的格式确实令人讨厌,因为无法直接使用
    pd.read\u clipboard()
    加载数据。这里的人都是志愿者,如果他们不得不花5到10分钟重新创建你的数据,他们可能不会这么做

    我会这样做:

    这是第一个数据帧,使用
    df1=pd.read\u剪贴板(index\u col=0)
    加载它:

    ProductID      CostMethod   Rate
    
    10               CPM   10.0
    20               CPC    0.3
    30              CPCV    0.4
    40               FLF  100.0
    50               VAD    0.0
    60               CPM    0.1
    
    ProductID  Date  Impressions  Clicks  CompletedViews
    10         01-Jan          300       4               0
    20         02-Jan           30       3               0
    30         03-Jan          200       4              20
    40         02-Jan          300       4               0
    40         02-Jan          500       4               0
    40         03-Jan          200       3               0
    90         04-Jan         3000       3               0
    50         05-Jan         3000       5               0
    
    这是第二个数据帧,使用
    df2=pd.read\u剪贴板(index\u col=0)
    加载它:

    ProductID      CostMethod   Rate
    
    10               CPM   10.0
    20               CPC    0.3
    30              CPCV    0.4
    40               FLF  100.0
    50               VAD    0.0
    60               CPM    0.1
    
    ProductID  Date  Impressions  Clicks  CompletedViews
    10         01-Jan          300       4               0
    20         02-Jan           30       3               0
    30         03-Jan          200       4              20
    40         02-Jan          300       4               0
    40         02-Jan          500       4               0
    40         03-Jan          200       3               0
    90         04-Jan         3000       3               0
    50         05-Jan         3000       5               0
    

    现在,就做作业而言,这里有一个建议的解决方案。我相信您将尝试理解此代码的作用,而不仅仅是重用它

    步骤1:合并两个数据帧

    我在df2左边合并,这真的很重要。请阅读有关的pandas文档中的更多内容

    第2步:计算你的支出

    我们将编写一个自定义函数,然后


    您可能会注意到,我计算的“花费”与您的不完全相同,但这是因为您最初关于如何计算它的规范不是很好。您可以很容易地更改
    calc\u Expense
    功能,以满足您的需求。

    您好,我无意粗鲁,但这不是一项家庭作业服务。你试过什么吗?你遇到了什么具体的障碍?当然是朱利安!最大的问题是要确保FLF是按一天的总数计算的,然后按发生的次数进行分割。希·朱利安,非常感谢你的帮助。本周我开始使用Python(来自excel),我正在尝试将我的工作文件从excel迁移到Python(边学习边学习)。通常我都能把事情办好。但在这里我真的被难住了。我非常感谢你花时间回答这个问题。这对我来说真的很重要!下次我一定会按照你的建议把我的问题安排得更好
    df3['Spend'] = df3.apply(calc_spend, axis=1)
    df3