如何根据索引的最大值差异创建新列?

丹尼尔·阿吉斯(Daniel Arges)

采取以下多索引数据框:

index_1   index_2   cum_value
0         2020-01      100.00
0         2020-02       50.00 
0         2020-03      -50.00
0         2020-04      150.00
0         2020-05      200.00    
1         2020-01       25.00
1         2020-02       50.00
1         2020-03     -100.00
1         2020-04       50.00
1         2020-05      200.00

如果考虑到过去几个月中该月内的过去最大值我需要创建一个new_col计算cum_value每个月底的差值index_1cum_valueindex_1

结果应该是这样的:

index_1   index_2   cum_value   new_col
0         2020-01      100.00    100.00 --> first positive value on index_1 [0]
0         2020-02       50.00      0.00
0         2020-03      -50.00      0.00
0         2020-04      150.00     50.00 --> (150 - 100)
0         2020-05      200.00     50.00 --> (200 - 150)
1         2020-01       25.00     25.00 --> first positive value on index_1 [1]
1         2020-02       50.00     25.00 --> (50 - 25)
1         2020-03     -100.00      0.00
1         2020-04       50.00      0.00
1         2020-05      200.00    150.00 --> (200 - 50)

带有正值的第一行new_col必须显示该值。我不需要负的最大值。

这是计算边际价值以支付一些税款的理由。

舒巴姆·沙玛(Shubham Sharma)

代码

c = df.groupby(level=0)['cum_value'].cummax()
m = df['cum_value'].ge(c) & df['cum_value'].ge(0)
df['new_col'] = df.loc[m, 'cum_value'].groupby(level=0).diff()
df['new_col'] = df['new_col'].fillna(df['cum_value']).mask(~m, 0)

解释说明

让我们group在数据帧上level=0,即index_1,改造柱cum_value使用cummax来计算累计最大值每个level=0组:

>>> c

index_1  index_2
0        2020-01    100.0
         2020-02    100.0
         2020-03    100.0
         2020-04    150.0
         2020-05    200.0
1        2020-01     25.0
         2020-02     50.0
         2020-03     50.0
         2020-04     50.0
         2020-05    200.0
Name: cum_value, dtype: float64

现在,将cum_value列与上面计算的累积最大值进行比较,以创建布尔掩码。请注意,我们仅考虑中的正值cum_value该布尔掩码的基本思想是,如果当前月份的值大于或等于前几个月的最大值,则该掩码的输出为True否则False

>>> m

index_1  index_2
0        2020-01     True
         2020-02    False
         2020-03    False
         2020-04     True
         2020-05     True
1        2020-01     True
         2020-02     True
         2020-03    False
         2020-04     True
         2020-05     True
Name: cum_value, dtype: bool

由于我们只对cum_value满足上述条件中的值感兴趣,因此可以使用布尔掩码来过滤这些值。

>>> df.loc[m, 'cum_value']

index_1  index_2
0        2020-01    100.0
         2020-04    150.0
         2020-05    200.0
1        2020-01     25.0
         2020-02     50.0
         2020-04     50.0
         2020-05    200.0
Name: cum_value, dtype: float64

现在,group将上面过滤的值放在level=0ieindex_1diff上,用于cum_value列上以计算当前值和先前最大值之间的差:

>>> df.loc[m, 'cum_value'].groupby(level=0).diff()

index_1  index_2
0        2020-01      NaN
         2020-04     50.0
         2020-05     50.0
1        2020-01      NaN
         2020-02     25.0
         2020-04      0.0
         2020-05    150.0
Name: cum_value, dtype: float64

最后,将NaN填充到新创建值中,new_col并屏蔽0不满足条件的值m

>>> df
                 cum_value  new_col
index_1 index_2                    
0       2020-01      100.0    100.0
        2020-02       50.0      0.0
        2020-03      -50.0      0.0
        2020-04      150.0     50.0
        2020-05      200.0     50.0
1       2020-01       25.0     25.0
        2020-02       50.0     25.0
        2020-03     -100.0      0.0
        2020-04       50.0      0.0
        2020-05      200.0    150.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据最小值和最大值创建新的熊猫列

来自分类Dev

根据另一列的值创建索引数最大的新列

来自分类Dev

根据最大值创建表

来自分类Dev

如何根据pandas中的组最大值将一列的标签分配给新的一列

来自分类Dev

每列的最大值,其他列的返回值,最大值,创建新的返回数据框

来自分类Dev

如何创建具有不同值的新表,但从另一列中选择最大值

来自分类Dev

根据列最大值获取记录

来自分类Dev

根据条件和最大值在熊猫中创建新行

来自分类Dev

根据组最大值在DataFrame列中分配新值

来自分类Dev

列的最大值和最小值之间的差异

来自分类Dev

取最大值并移至新列

来自分类Dev

根据属于组集的不同列的最大值创建一个等级列

来自分类Dev

如何在pandas中创建一个新列,其中包含与先前特定值的索引差异?

来自分类Dev

如何在pandas中创建一个新列,其中包含与先前特定值的索引差异?

来自分类Dev

如何根据最大值报告列标题,但仅当该值超过特定值时?

来自分类Dev

根据其他列在python pandas数据框中创建子列表的最大值

来自分类Dev

如何基于最大值创建列表?

来自分类Dev

Python:如何根据首次达到每个组的列中的最大值来分配值?

来自分类Dev

Python:如何根据首次达到每个组的列中的最大值来分配值?

来自分类Dev

在pyspark中使用groupby基于过滤的行创建具有最大值的新列

来自分类Dev

根据列值提取滚动最大值

来自分类Dev

Python Pandas根据列的最大值删除列

来自分类Dev

如何用其他矩阵的列最大值对矩阵进行索引

来自分类Dev

如何为熊猫数据框中的多索引中的列选择最大值?

来自分类Dev

如何识别每行最大值的列

来自分类Dev

如何从列中找到最大值

来自分类Dev

如何设置列的最大值

来自分类Dev

Python:Pandas:如何根据Groupby在另一列中查找最大值

来自分类Dev

如何根据最大值重新编码数据帧列?

Related 相关文章

  1. 1

    根据最小值和最大值创建新的熊猫列

  2. 2

    根据另一列的值创建索引数最大的新列

  3. 3

    根据最大值创建表

  4. 4

    如何根据pandas中的组最大值将一列的标签分配给新的一列

  5. 5

    每列的最大值,其他列的返回值,最大值,创建新的返回数据框

  6. 6

    如何创建具有不同值的新表,但从另一列中选择最大值

  7. 7

    根据列最大值获取记录

  8. 8

    根据条件和最大值在熊猫中创建新行

  9. 9

    根据组最大值在DataFrame列中分配新值

  10. 10

    列的最大值和最小值之间的差异

  11. 11

    取最大值并移至新列

  12. 12

    根据属于组集的不同列的最大值创建一个等级列

  13. 13

    如何在pandas中创建一个新列,其中包含与先前特定值的索引差异?

  14. 14

    如何在pandas中创建一个新列,其中包含与先前特定值的索引差异?

  15. 15

    如何根据最大值报告列标题,但仅当该值超过特定值时?

  16. 16

    根据其他列在python pandas数据框中创建子列表的最大值

  17. 17

    如何基于最大值创建列表?

  18. 18

    Python:如何根据首次达到每个组的列中的最大值来分配值?

  19. 19

    Python:如何根据首次达到每个组的列中的最大值来分配值?

  20. 20

    在pyspark中使用groupby基于过滤的行创建具有最大值的新列

  21. 21

    根据列值提取滚动最大值

  22. 22

    Python Pandas根据列的最大值删除列

  23. 23

    如何用其他矩阵的列最大值对矩阵进行索引

  24. 24

    如何为熊猫数据框中的多索引中的列选择最大值?

  25. 25

    如何识别每行最大值的列

  26. 26

    如何从列中找到最大值

  27. 27

    如何设置列的最大值

  28. 28

    Python:Pandas:如何根据Groupby在另一列中查找最大值

  29. 29

    如何根据最大值重新编码数据帧列?

热门标签

归档