Pandas计算年度(或任何其他指数)行的变化

时间:2014-12-02 04:48:34

标签: python datetime pandas

假设我有一个DataFrame:

            A    B  C  D
           ---  -- -- -- 
2012-01-01 AAA  11 22 33
2013-01-01 AAA  11 23 53
2014-01-01 AAA  11 78 96  
2012-01-01 BBB  12 42 24
2013-01-01 BBB  13 97 91
2014-01-01 BBB  14 25 12 

(索引是日期时间)

我想弄清楚第一次出现AAA和最后一次出现在C列之间的变化(在这种情况下是78-22 = 56)。目前我正在通过旋转表来执行此操作,因此年份是顶部的列并添加差异列。有没有更好的方法来做这个而不修改表格?

2 个答案:

答案 0 :(得分:2)

如果A有很多组,您可以考虑使用groupby。假设df是要使用的DataFrame。

a = df.groupby("A")["C"]
newt = a.last() - a.first() 
print(newt)

结果:

A
AAA    56
BBB   -17
Name: C, dtype: int64

答案 1 :(得分:0)

您可以执行以下操作,但不会修改表格。

import pandas as pd

#%% create dataframe
df = pd.DataFrame(index=['2012-01-01','2013-01-01','2014-01-01','2012-01-01','2013-01-01','2014-01-01',])
df['A'] = ['AAA','AAA','AAA','BBB','BBB','BBB'] 
df['C'] = [22, 23, 78, 42, 97, 25]
print(df)

#%% do the calculation
first_AAA = df.loc[(df['A']=='AAA'), 'C'].values[0]
last_AAA = df.loc[(df['A']=='AAA'), 'C'].values[-1]
Your_answer = last_AAA-first_AAA

#%% possibly slightly faster
AAA = df.loc[(df['A']=='AAA'), 'C'].values
Your_answer = AAA[-1]-AAA[0]

有关索引的更多信息,请访问:http://pandas.pydata.org/pandas-docs/stable/indexing.html