假设我有一个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)。目前我正在通过旋转表来执行此操作,因此年份是顶部的列并添加差异列。有没有更好的方法来做这个而不修改表格?
答案 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