首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫发现两栏的累积差异

熊猫发现两栏的累积差异
EN

Stack Overflow用户
提问于 2021-07-08 23:38:51
回答 1查看 252关注 0票数 3

我对python非常陌生,并且正在努力解决这个问题。我想编写一个程序,允许我为'a‘中的每个值找到'b’中所有值的累积差值,并将其写入一个新的列'c‘。我有一只熊猫,像这样:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'a': [10, 15, 25, 30, 10, 20], 'b': [ 10, 'na', 20, 'na', 30, 10]})
        
Index|   a  |  b  |
0    |  10  | 10  |
1    |  15  | na  |
2    |  25  | 20  |
3    |  30  | na  |
4    |  10  | 30  |
5    |  20  | 10  |

我想跳过nas。B中的项是高于零的值,因此如果这样做更容易,我可以将nas更改为0,并且仍然跳过所有的0值。

理想情况下,我希望有这样一个新的专栏df['c']

代码语言:javascript
复制
Index|   a  |  b  |  c  |
0    |  10  | 10  |  0  |  # 10-10 = 0
1    |  15  | na  |  5  |  # 15 - 10 = 5
2    |  25  | 20  | 20  |  # (25-20) + (25-10) = 5 + 15 = 20
3    |  30  | na  | 30  |  # (30-20) + (30-10) = 10+20 = 30
4    |  10  | 30  |-30  |  # (10-30) + (10-20) + (10-10) = -30
5    |  20  | 10  | 10  |  # (20-10) + (20-30) + (20-20) + (20-10) = 10

我尝试过使用df['c] = cumsum(df['a'] - df['b']),但它没有完成工作--我需要从df['a']的对应值中减去df['b'],以及df'b‘列中它上面的所有值。

我也尝试过df['c] = df['a'] * len(df['b'].unique()) - cumsum(df['b']),但问题是len(df['b'].unique())总是相同的长度(根据索引不会改变),而b中的数字不一定是唯一的(例如,10出现在索引0和5)。

谁能给我指明正确的方向?

这也是我第一次使用堆栈溢出;如果对我的格式或问题有什么不清楚的地方,请告诉我。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-09 00:00:35

你离我很近!在第二种方法中,您适当地重构了数学,但是棘手的部分是如何通过这个代码片段NaN正确地解释len(df['b'].unique())。您可以创建一个掩码,其中NaN值=0,非NaN值=1,然后累加这些值以获得适当的乘法系数:

代码语言:javascript
复制
df["c"] = (df["a"] * df["b"].notnull().cumsum()) - df["b"].fillna(0).cumsum()

print(df)
    a     b     c
0  10  10.0   0.0
1  15   NaN   5.0
2  25  20.0  20.0
3  30   NaN  30.0
4  10  30.0 -30.0
5  20  10.0  10.0

为了简化系数的解析方法,下面是一个中间输出:

代码语言:javascript
复制
>>> df["b"].notnull().cumsum()
0    1
1    1
2    2
3    2
4    3
5    4
Name: b, dtype: int64
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68309675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档