如何按pandas中的列分组并根据列值应用ifelse

零堆栈

我正在尝试按 Pandas DataFrame 中的列分组并应用 ifelse 函数,该函数具有使用列值的测试,并根据测试返回不同的 true 和 false 值。

我已经使用 data.table 包在 R 中轻松完成了这一点,我希望在 Python 中使用 Pandas 进行相同的操作。

library(data.table)

dat <- data.table(
  i_n = c('a', 'b', 'b', 'd', 'e', 'f', 'g', 'h', 'h', 'i'),
  m_b_r = c(0, 1, 0, 0, 0, 0, 0, 1, 0, 0),
  o_q = c(1, 8, 8, 1, 1, 1, 1, 2, 2, 1),
  a_q = c(1, 5, 15, 1, 57, 1, 5, 1, 1, 1)
)

dat <- dat[, ('p_q') := ifelse(
  test =get('m_b_r') == 1,
  yes =get('a_q'),
  no =get('o_q') - data.table::shift(get('a_q'), n = 1L, type = 'lag', fill = 0 )
), by = 'i_n']
耶斯列

我相信需要numpy.whereDataFrameGroupBy.shift

shifted = dat.groupby('i_n')['a_q'].shift().fillna(0)
dat['p_q'] = np.where(dat['m_b_r'] == 1, dat['a_q'], dat['o_q'] - shifted)
print (dat)
  i_n  m_b_r  o_q  a_q  p_q
0   a      0    1    1  1.0
1   b      1    8    5  5.0
2   b      0    8   15  3.0
3   d      0    1    1  1.0
4   e      0    1   57  1.0
5   f      0    1    1  1.0
6   g      0    1    5  1.0
7   h      1    2    1  1.0
8   h      0    2    1  1.0
9   i      0    1    1  1.0

有可能调用自定义函数,但更快是第一个解决方案:

def f(x):
    x['p_q'] = np.where(x['m_b_r'] == 1, x['a_q'], x['o_q'] - x['a_q'].shift().fillna(0))
    return x

df = dat.groupby('i_n').apply(f)
print (df)
  i_n  m_b_r  o_q  a_q  p_q
0   a      0    1    1  1.0
1   b      1    8    5  5.0
2   b      0    8   15  3.0
3   d      0    1    1  1.0
4   e      0    1   57  1.0
5   f      0    1    1  1.0
6   g      0    1    5  1.0
7   h      1    2    1  1.0
8   h      0    2    1  1.0
9   i      0    1    1  1.0

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pandas DataFrame:如何按列中的值分组并从分组值中创建新列

来自分类Dev

Pandas:如何按连续列值分组

来自分类Dev

分组值并根据Pandas中的列删除分组的重复项

来自分类Dev

如何按列值分组?

来自分类Dev

按两列中的值分组并在Pandas中过滤

来自分类Dev

按列总和值与Pandas分组

来自分类Dev

计算pandas数据框中的共存,以得到按其他列值分组的列值

来自分类Dev

熊猫按列中的每个值分组

来自分类Dev

mysql在多个列中按值分组

来自分类Dev

如何根据其他列使用按列分组

来自分类Dev

根据其他列值按查询分组

来自分类Dev

根据按日期分组的枚举值获取多列中的最大分数和名称

来自分类Dev

Pandas DataFrame-当按另一列分组时如何获取每列的最新值

来自分类Dev

根据Pandas中不同列的分组依据更新特定列的值

来自分类Dev

如何根据R中其他两列的分组来标准化列中的值?

来自分类Dev

根据A列的值对B列的值应用操作-Pandas

来自分类Dev

如何根据分组的A列获取B列的值

来自分类Dev

如何在pandas数据框中获取具有部分总和的列(按两列分组)

来自分类Dev

Excel中的值根据列中的重复值进行分组

来自分类Dev

按C列排序,但将F列中的值分组

来自分类Dev

按列分组小于或等于该列中的值

来自分类Dev

按多个值列分组

来自分类Dev

ListView按列值分组

来自分类Dev

按列分组值组合

来自分类Dev

计算按列分组的值

来自分类Dev

如何在Oracle中查询列值的分布(按值范围分组)?

来自分类Dev

如何解码json,按列值分组,并对每组中的值求和?

来自分类Dev

如何按某些列分组并在现有的另一列中显示分组值

来自分类Dev

从 Pandas 数据框中,根据其他列的分组和最大值返回特定列值

Related 相关文章

  1. 1

    Pandas DataFrame:如何按列中的值分组并从分组值中创建新列

  2. 2

    Pandas:如何按连续列值分组

  3. 3

    分组值并根据Pandas中的列删除分组的重复项

  4. 4

    如何按列值分组?

  5. 5

    按两列中的值分组并在Pandas中过滤

  6. 6

    按列总和值与Pandas分组

  7. 7

    计算pandas数据框中的共存,以得到按其他列值分组的列值

  8. 8

    熊猫按列中的每个值分组

  9. 9

    mysql在多个列中按值分组

  10. 10

    如何根据其他列使用按列分组

  11. 11

    根据其他列值按查询分组

  12. 12

    根据按日期分组的枚举值获取多列中的最大分数和名称

  13. 13

    Pandas DataFrame-当按另一列分组时如何获取每列的最新值

  14. 14

    根据Pandas中不同列的分组依据更新特定列的值

  15. 15

    如何根据R中其他两列的分组来标准化列中的值?

  16. 16

    根据A列的值对B列的值应用操作-Pandas

  17. 17

    如何根据分组的A列获取B列的值

  18. 18

    如何在pandas数据框中获取具有部分总和的列(按两列分组)

  19. 19

    Excel中的值根据列中的重复值进行分组

  20. 20

    按C列排序,但将F列中的值分组

  21. 21

    按列分组小于或等于该列中的值

  22. 22

    按多个值列分组

  23. 23

    ListView按列值分组

  24. 24

    按列分组值组合

  25. 25

    计算按列分组的值

  26. 26

    如何在Oracle中查询列值的分布(按值范围分组)?

  27. 27

    如何解码json,按列值分组,并对每组中的值求和?

  28. 28

    如何按某些列分组并在现有的另一列中显示分组值

  29. 29

    从 Pandas 数据框中,根据其他列的分组和最大值返回特定列值

热门标签

归档