Получение строк, содержащих определенное значение в столбце для каждой группы в Pandas - PullRequest
0 голосов
/ 19 февраля 2020

интересно, не могли бы вы дать какое-то руководство по этому вопросу? Я все еще работаю над этими данными , и вот что я пытаюсь сделать: - Для каждой сгруппированной 'страны или района' я пытаясь получить строки, которые содержат «количество» 2016 года и «количество» 2011 года. Однако, похоже, что в некоторых странах нет строки для 2016 или 2011 года. Проблема в том, что я получаю ошибку при выполнении следующего кода:


for c in grp['Country or Area'].unique():
  deltafiveyrs.append(grp[(grp['Year'] == 2016.0) & (grp['Country or Area'] == c)]['Quantity'] -  grp[(grp['Year'] == 2011.0) & (grp['Country or Area'] == c)]['Quantity'])

Полученное сообщение об ошибке: :

/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:5: DeprecationWarning: elementwise comparison failed; this will raise an error in the future.
  """
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-30-90579ab30ed1> in <module>()
      3 
      4 for c in grp['Country or Area'].unique():
----> 5   deltafiveyrs.append(grp[(grp['Year'] == 2016.0) & (grp['Country or Area'] == c)]['Quantity'] -  grp[(grp['Year'] == 2011.0) & (grp['Country or Area'] == c)]['Quantity'])
      6 
      7 

/usr/local/lib/python3.6/dist-packages/pandas/core/base.py in __getitem__(self, key)
    266         else:
    267             if key not in self.obj:
--> 268                 raise KeyError("Column not found: {key}".format(key=key))
    269             return self._gotitem(key, ndim=1)
    270 

KeyError: 'Column not found: False'

кто-нибудь знает, что происходит? Должны ли значения в столбце 'лет' быть изменены с плавающей на int? И как лучше всего обращаться с группами без значений для 2011/2016?

Большое спасибо

1 Ответ

0 голосов
/ 19 февраля 2020

Исследуйте и очистите данные, прежде чем работать над этим. несколько столбцов (без учета количества сносок) имеют значения nan. так что давайте отбросим эти строки и продолжим. Я попробовал это в блокноте Jupyter, который дал данные о странах с количеством в 2011 и 2016 годах.

cdf = df[['Country or Area', 'Commodity - Transaction', 'Year', 'Unit', 'Quantity']]
cdf.dropna()
cdf[(cdf['Year']== 2011) | (cdf['Year']== 2016)]
...