首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数来计算值垂直放置的月份之间的差值使用python pandas库

函数来计算值垂直放置的月份之间的差值使用python pandas库
EN

Stack Overflow用户
提问于 2015-05-13 12:29:29
回答 2查看 78关注 0票数 0

我有一个数据集,其中显示了按月(月)收集的项目(AMT)的数量。

我知道如何创建一个新列来计算两个垂直列之间的差值,即new column = Amount -2。

我不知道如何创建一个函数来计算一列,当两个月的值是垂直的时候,“差”,例如: Feb - Jan将是11-10 = 1。

在excel中,您可以创建一个指向单元格的公式来获得第一个值,然后将其偏移一行以获得第二个值。

然而,我不知道pandas python的偏移量函数,或者用垂直方式的数据计算偏移量的其他方法?

代码语言:javascript
复制
Month   Amt Difference
Jan     10   0 (as there is no previous month to compare it with)
Feb     11   1
Mar     15   4
Apr     12   -3
May     17
Jun     10
Jul     30
Aug     31
Sep     32
Oct     10
Nov     25
Dec     30
EN

回答 2

Stack Overflow用户

发布于 2015-05-13 12:40:57

一种方法是利用索引,从前一个索引中定位Amt值并减去它们,如下所示:

代码语言:javascript
复制
 df['Diff'] = [df.loc[x, "Amt"] - df.loc[x-1 if x>0 else 0, "Amt"] 
               for x in df.index]

In [98]: df
Out[98]: 
   Month  Amt  Diff
0    Jan   10     0
1    Feb   11     1
2    Mar   15     4
3    Apr   12    -3
4    May   17     5
5    Jun   10    -7
6    Jul   30    20
7    Aug   31     1
8    Sep   32     1
9    Oct   10   -22
10   Nov   25    15
11   Dec   30     5

要扩展上面的内容,您可以从Month构建df的索引,该索引将是字符串列表,然后通过枚举索引进行定位,即:

代码语言:javascript
复制
df = df.set_index('Month')
idx = df.index

df['Diff'] = [df.loc[x, "Amt"] - df.loc[idx[i-1] if i>0 else idx[0], "Amt"] 
              for i, x in enumerate(idx)]

其思想是将索引放在手边,定位列并获取其索引,然后根据前一索引(如果不是第一列)计算差值。

票数 0
EN

Stack Overflow用户

发布于 2015-05-13 13:15:48

您可以使用pandas中的.diff()函数一步完成此操作。假设df是您的熊猫数据帧:

代码语言:javascript
复制
>> df['Diff'] = df['Amt'].diff().fillna(0)
>> print df
   Month  Amt  Diff
0    Jan   10     0
1    Feb   11     1
2    Mar   15     4
3    Apr   12    -3
4    May   17     5
5    Jun   10    -7
6    Jul   30    20
7    Aug   31     1
8    Sep   32     1
9    Oct   10   -22
10   Nov   25    15
11   Dec   30     5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30205715

复制
相关文章

相似问题

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