Применить лямбду, чтобы заполнить столбец со средним от столбцов слева от данного столбца - PullRequest
0 голосов
/ 03 мая 2020

Дано:

d = {'col1': [1,2], 'col2': [2,2], 'col3': [3,2], 'col4': [np.nan,np.nan], 'col5': [1,2], 'col6': [2,2], 'col7': [3,2], 'col8': [np.nan,np.nan]}

df = pd.DataFrame(data=d)

df

   col1  col2  col3  col4  col5  col6  col7  col8
0     1     2     3   NaN     1     2     3   NaN
1     2     2     2   NaN     2     2     2   NaN

что лямбда может быть применена для заполнения col4 со средним значением col1, col2 и col3 и для заполнения col8 со средним значением col5, col6 и col7 - в одном утверждении?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Если вы действительно хотите использовать лямбду, вы можете сделать:

df['mean1'] = df.apply(lambda row: np.mean(row['col1'],row['col2'],row['col3']),axis=1)
df['mean1'] = df.apply(lambda row: np.mean(row['col5'],row['col6'],row['col7']),axis=1)

В качестве альтернативы вы можете сделать в одной строке, как показано ниже, используя pandas .mean, хотя я думаю, что это понятнее в двух строках

df['mean1'], df['mean2'] = df[['col1','col2','col3']].mean(axis=1), df[['col5','col6','col7']].mean(axis=1)
0 голосов
/ 03 мая 2020
df['col4'] = df[['col1', 'col2','col3']].mean(axis=1)
df['col8'] = df[['col5', 'col6','col7']].mean(axis=1)

Цепочка

 df[['col4', 'col8']]=df[['col1', 'col2','col3']].mean(axis=1),df[['col5', 'col6','col7']].mean(axis=1)
df

Или нарезать и применить среднее

df.iloc[:,:3].mean(axis=1)
df.iloc[:,-4:-1].mean(axis=1)

Связанные вместе

 df[['col4', 'col8']]=df.iloc[:,:3].mean(axis=1),df.iloc[:,-4:-1].mean(axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...