我有一个Panda的dataframe如下:
我想得到2007年的PIB低于2002年的国家,但是我不能只使用Pandas内置方法而不使用python迭代或类似的东西来编写代码。我得到的最多的是下面这行:
df[df[df.year == 2007].PIB < df[df.year == 2002].PIB].country
但我得到以下错误:
ValueError: Can only compare identically-labeled Series objects
到目前为止,我只使用Pandas过滤不同列的数据,但我不知道如何比较同一列的数据,在本例中是年份。
4条答案
按热度按时间6ss1mwsb1#
我的策略是使用pivot_table。假设没有两行具有相同的('country','year')对。在此假设下,
aggfunc=np.sum
表示唯一的单个PIB
值。pivot_table看起来像这样:
lo8azlld2#
我建议创建
Series
与索引country
列,但必须在2007
和2002
相同数量的国家比较系列具有相同的索引值:另一个想法是先按
DataFrame.pivot
旋转,然后按年份选择列,并与boolean indexing
中的索引进行比较:edqdpe6u3#
下面是我的dataframe:
如果我过滤2002年和2007年,我得到。
你想比较每个国家的PIB的演变。
Pandas不知道这一点,它试图比较值,但这里基于相同的索引。女巫不是你想要的,这是不可能的,因为索引是不同的。
所以你只需要使用
set_index()
现在你可以比较
edqdpe6u4#
试试这个(考虑到你只需要这些国家的列表):