Панды меняют строки в DataFrame без присваивания - PullRequest
0 голосов
/ 06 июня 2018

Скажем, у нас есть Python DataFrame Python:

In[1]: df = pd.DataFrame({'A': [1, 1, 2, 3, 5],
                          'B': [5, 6, 7, 8, 9]})

In[2]: print(df)
    A  B
 0  1  5
 1  1  6
 2  2  7
 3  3  8
 4  5  9

Я хочу изменить строки, которые соответствуют определенному условию.Я знаю, что это можно сделать с помощью прямого назначения:

In[3]: df[df.A==1] = pd.DataFrame([{'A': 0, 'B': 5}, 
                                   {'A': 0, 'B': 6}])

In[4]: print(df)
    A  B
 0  0  5
 1  0  6
 2  2  7
 3  3  8
 4  5  9

Мой вопрос: есть ли эквивалентное решение для указанного выше назначения, которое бы вернуло новый DataFrame с измененными строками,то есть решение без сохранения состояния ?Я ищу что-то вроде pandas.DataFrame.assign, но которое действует на строки вместо столбцов.

1 Ответ

0 голосов
/ 06 июня 2018

DataFrame.copy

df2 = df.copy()
df2[df.A == 1] = pd.DataFrame([{'A': 0, 'B': 5}, {'A': 0, 'B': 6}])

DataFrame.mask + fillna

m = df.A == 1
fill_df = pd.DataFrame([{'A': 0, 'B': 5}, {'A': 0, 'B': 6}], index=df.index[m])
df2 = df.mask(m).fillna(fill_df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...