Панды Датафрейм.Добавить несколько столбцов на основе ненулевых значений других столбцов - PullRequest
0 голосов
/ 23 февраля 2019

Пример моего фрейма данных.

np.random.seed(66)
df = pd.DataFrame(
    np.random.rand(5, 3), 
    columns=list('ABC'), 
    index=['R{}'.format(i) for i in range(5)]
)
df[df < .5] = None
df.head()

    A    B    C
R0  NaN  NaN  NaN
R1  0.67 NaN  NaN
R2  0.75 0.55 0.51
R3  NaN  NaN  0.82
R4  NaN  NaN  0.67

Решение для одного столбца

df['A_percent'] = (df.loc[df['A'].notnull(),['A']] * 100).astype(np.int32)
df.head()

   A    B    C    A_percent
R0 NaN  NaN  NaN  NaN
R1 0.67 NaN  NaN  67.0
R2 0.75 0.55 0.51 75.0
R3 NaN  NaN  0.82 NaN
R4 NaN  NaN  0.67 NaN

Все ломается, когда я пытаюсь сделать то же самое для нескольких столбцов

df['A_percent', 'B_percent'] = (df.loc[df['A', 'B'].notnull(),['A', 'B']] * 100).astype(np.int32)

Может ли этобыть сделано за один шаг?

1 Ответ

0 голосов
/ 23 февраля 2019

Вы можете использовать numpy.floor, тогда логическая маска должна быть удалена:

df[['A_percent', 'B_percent']] = np.floor(df[['A', 'B']] * 100)
print (df)
           A         B         C  A_percent  B_percent
R0       NaN       NaN       NaN        NaN        NaN
R1  0.679109       NaN       NaN       67.0        NaN
R2  0.758416  0.557619  0.514803       75.0       55.0
R3       NaN       NaN  0.829095        NaN        NaN
R4       NaN       NaN  0.678006        NaN        NaN

Ваше решение следует изменить, заменив отсутствующие значения на некоторые числовые, например 0,так что возможно преобразование в integer и для нового столбца используйте DataFrame.where:

mask = df[['A','B']].notnull()
df1 = (df[['A','B']].fillna(0)*100).astype(np.int32)

df[['A_percent', 'B_percent']] = df1.where(mask)
print (df)
           A         B         C  A_percent  B_percent
R0       NaN       NaN       NaN        NaN        NaN
R1  0.679109       NaN       NaN       67.0        NaN
R2  0.758416  0.557619  0.514803       75.0       55.0
R3       NaN       NaN  0.829095        NaN        NaN
R4       NaN       NaN  0.678006        NaN        NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...