Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧切片_Python_Pandas_Dataframe - Fatal编程技术网

Python 数据帧切片

Python 数据帧切片,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: 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.

我有以下数据帧:

    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
在本例中,我如何计算过去五年2016,15,14,13,12的平均值? 我试过了


但这会抛出一个打字错误。为什么我不能在这里切分这些列?

不确定为什么过去五年是2012-2016年——它们似乎是头五年。尽管如此,要找到2012-2016年“KGV”的平均值,您可以使用

df[df['Kategorie'] == 'KGV'][[c for c in df.columns if c != 'Kategorie' and 2012 <= int(c) <= 2016]].mean(axis=1)

不确定为什么过去五年是2012-2016年——它们似乎是头五年。尽管如此,要找到2012-2016年“KGV”的平均值,您可以使用

df[df['Kategorie'] == 'KGV'][[c for c in df.columns if c != 'Kategorie' and 2012 <= int(c) <= 2016]].mean(axis=1)
我使用了filter和iloc

我使用了filter和iloc

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的列,它将被选中。

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的列,它将被选中。

为什么在2012-2016年的最后五年?只要您开始尝试使用u getitem uu方括号索引进行切片,而不是列。此外,切片仅向前工作。在这种情况下,您可以使用df.loc[df[Kategorie]==KGV,2012:2016]来进行索引。@AmiTavory:从现在开始向后最后一次。不是最后一个元素中的最后一个。为什么是2012-2016年的最后五年?只要您开始尝试使用_getitem__;方括号索引进行切片,而不是列。此外,切片仅向前工作。在这种情况下,您可以使用df.loc[df[Kategorie]==KGV,2012:2016]来进行索引。@AmiTavory:从现在开始向后最后一次。不是最后一个元素中的最后一个。从现在开始向后。为什么要用这句话来对比艾翰的方法呢?@Jan没有特别的理由——我在他之前回答过,但我更喜欢他。最后一句话是从现在开始的。为什么要用这个来对比@ayhan的方法呢?@Jan没有特别的理由-我在他之前回答过,但我更喜欢他。谢谢!中间没有foo列,列是每年排序的。非常感谢!中间没有foo列,列是每年排序的。