以Pandas为单位对数组进行计数

2024-09-28 22:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个新的列,每个索引行的列数都是正数

这是数据帧的外观:

+----+---------+---------+---------+---------+---------+
|    |   week1 |   week2 |   week3 |   week4 |   week5 |
+====+=========+=========+=========+=========+=========+
|  0 |      70 |      60 |      50 |     -40 |     -30 |
+----+---------+---------+---------+---------+---------+
|  1 |      50 |      10 |     -20 |     -40 |     -60 |
+----+---------+---------+---------+---------+---------+
|  2 |     -80 |     -90 |    -100 |    -110 |    -120 |
+----+---------+---------+---------+---------+---------+
|  3 |     110 |      80 |      70 |      60 |      50 |
+----+---------+---------+---------+---------+---------+
|  4 |      10 |     -50 |     -70 |     -80 |     -90 |
+----+---------+---------+---------+---------+---------+

这就是我要寻找的结果,一个新的列,如果这个数为正,它会计算周数

+----+---------+---------+---------+---------+---------+------------------+
|    |   week1 |   week2 |   week3 |   week4 |   week5 |   POSITIVE WEEKS |
+====+=========+=========+=========+=========+=========+==================+
|  0 |      70 |      60 |      50 |     -40 |     -30 |                3 |
+----+---------+---------+---------+---------+---------+------------------+
|  1 |      50 |      10 |     -20 |     -40 |     -60 |                2 |
+----+---------+---------+---------+---------+---------+------------------+
|  2 |     -80 |     -90 |    -100 |    -110 |    -120 |                0 |
+----+---------+---------+---------+---------+---------+------------------+
|  3 |     110 |      80 |      70 |      60 |      50 |                5 |
+----+---------+---------+---------+---------+---------+------------------+
|  4 |      10 |     -50 |     -70 |     -80 |     -90 |                1 |
+----+---------+---------+---------+---------+---------+------------------+

Tags: 数据外观weekspositive列数正数周数week2
2条回答

试试这个:

df['Positive Weeks'] = df.gt(0).sum(axis=1)

@rhug123有一个很好的答案

只是想以类似dplyr的方式展示一种不同的方法:

>>> from datar.all import *
>>> df = tribble(
...     f.week1, f.week2, f.week3, f.week4, f.week5,
...          70,      60,      50,     -40,     -30,
...          50,      10,     -20,     -40,     -60,
...         -80,     -90,    -100,    -110,    -120,
...         110,      80,      70,      60,      50,
...          10,     -50,     -70,     -80,     -90,
... )
>>> df >> rowwise() >> mutate(
...     POSITIVE_WEEKS=sum(as_integer(c_across(starts_with("week")) > 0))
... )
    week1   week2   week3   week4   week5  POSITIVE_WEEKS
  <int64> <int64> <int64> <int64> <int64>         <int64>
0      70      60      50     -40     -30               3
1      50      10     -20     -40     -60               2
2     -80     -90    -100    -110    -120               0
3     110      80      70      60      50               5
4      10     -50     -70     -80     -90               1
>>> # or
>>> df >> rowwise() >> mutate(
...     POSITIVE_WEEKS=sum(if_else(c_across(starts_with("week")) > 0, 1, 0))
... )
    week1   week2   week3   week4   week5  POSITIVE_WEEKS
  <int64> <int64> <int64> <int64> <int64>         <int64>
0      70      60      50     -40     -30               3
1      50      10     -20     -40     -60               2
2     -80     -90    -100    -110    -120               0
3     110      80      70      60      50               5
4      10     -50     -70     -80     -90               1

^{}是一个在python中移植dplyr和相关R包的包。我是这个包裹的作者

相关问题 更多 >