Сгруппировать по одному столбцу и заменить значения в нескольких столбцах на основе условия, используя Pandas - PullRequest
0 голосов
/ 24 апреля 2020

С учетом следующего кадра данных:

   id city district  year  price
0   1   bj       cy  2018      8
1   1   bj       cy  2019      6
2   1   xd       dt  2020      7
3   2   sh       hp  2018      4
4   2   sh       hp  2019      3
5   2   sh       pd  2020      5

Допустим, есть ошибки опечаток в столбцах city и district для строк в столбцах year, что составляет 2020, поэтому я хочу сгруппировать id и ffill те столбцы с предыдущими значениями.

Как я могу сделать это в Pandas? Большое спасибо.

Желаемый результат будет выглядеть так:

   id city district  year  price
0   1   bj       cy  2018      8
1   1   bj       cy  2019      6
2   1   bj       cy  2020      7
3   2   sh       hp  2018      4
4   2   sh       hp  2019      3
5   2   sh       hp  2020      5

1 Ответ

0 голосов
/ 24 апреля 2020

Следующий код работает, но я не уверен, что это лучшие решения.

Если у вас есть другие, можете поделиться. Спасибо.

df.loc[df['year'].isin(['2020']), ['city', 'district']] = np.nan
df[['city', 'district']] = df[['city', 'district']].fillna(df.groupby('id')[['city', 'district']].ffill())

Out:

   id city district  year  price
0   1   bj       cy  2018      8
1   1   bj       cy  2019      6
2   1   bj       cy  2020      7
3   2   sh       hp  2018      4
4   2   sh       hp  2019      3
5   2   sh       hp  2020      5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...