Pandas: дополняет фрейм данных до максимальной длины строки - PullRequest
1 голос
/ 08 марта 2019

У меня есть фрейм данных, подобный следующему:

df = pd.DataFrame({"id": [100, 200, 200, 300, 300, 300], "val1": [1.5, 2.5, 4.5, np.nan, 6.5, np.nan], "val2": [9.5, 7.5, 8.5, 3.5, np.nan, np.nan]})

Чего я хочу добиться, так это обнулить каждую группу (при условии, что фрейм данных сгруппирован по id) до максимального количества строк для всех групп. Максимальное количество строк в id для указанного выше фрейма данных равно 3, поэтому результирующий фрейм данных должен выглядеть следующим образом:

df_true = pd.DataFrame({"id": [100, 100, 100, 200, 200 ,200, 300, 300, 300], "val1": [1.5, 0, 0, 2.5, 4.5, 0, np.nan, 6.5, np.nan], "val2": [9.5, 0, 0, 7.5, 8.5, 0, 3.5, np.nan, np.nan]})

Может ли кто-нибудь указать мне правильное направление, как этого достичь?

1 Ответ

2 голосов
/ 08 марта 2019

Таким образом, мы делаем с cumcount с идентификатором, затем используем stack и unstack

df['new']=df.groupby('id').cumcount()
df_true=df.set_index(['id','new']).unstack(fill_value=0).stack(dropna=False).reset_index('id')
df_true
Out[908]: 
      id  val1  val2
new                 
0    100   1.5   9.5
1    100   0.0   0.0
2    100   0.0   0.0
0    200   2.5   7.5
1    200   4.5   8.5
2    200   0.0   0.0
0    300   NaN   3.5
1    300   6.5   NaN
2    300   NaN   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...