我有以下数据框:
2012 2013 2014 2015 2016 2017 2018 Kategorie
0 5.31 5.27 5.61 4.34 4.54 5.02 7.07 Gewinn pro Aktie in EUR
1 13.39 14.70 12.45 16.29 15.67 14.17 10.08 KGV
2 -21.21 -0.75 6.45 -22.63 -7.75 9.76 47.52 Gewinnwachstum
3 -17.78 2.27 -0.55 3.39 1.48 0.34 NaN PEG
现在,我只选择KGV
行:
df[df["Kategorie"] == "KGV"]
哪个输出:
2012 2013 2014 2015 2016 2017 2018 Kategorie
1 13.39 14.7 12.45 16.29 15.67 14.17 10.08 KGV
如何计算过去五年的mean()
(本例中为2016,15,14,13,12)?
我试过了
df[df["Kategorie"] == "KGV"]["2016":"2012"].mean()
但这会引发TypeError
。为什么我不能在这里切片?
答案 0 :(得分:4)
loc
支持这种切片类型(从左到右):
df.loc[df["Kategorie"] == "KGV", "2012":"2016"].mean(axis=1)
Out:
1 14.5
dtype: float64
请注意,这并不一定意味着2012年,2013年,2014年,2015年和2016年。这些是字符串,因此它表示df['2012']
和df['2016']
之间的所有列。中间可能有一个名为foo
的列,它将被选中。
答案 1 :(得分:2)
不确定为什么过去五年是2012-2016(它们似乎是第一个五年)。尽管如此,要查找'KGV'
的2012-2016平均值,您可以使用
df[df['Kategorie'] == 'KGV'][[c for c in df.columns if c != 'Kategorie' and 2012 <= int(c) <= 2016]].mean(axis=1)
答案 2 :(得分:2)
我使用了filter
和iloc
row = df[df.Kategorie == 'KGV']
row.filter(regex='\d{4}').sort_index(1).iloc[:, -5:].mean(1)
1 13.732
dtype: float64