#pandas
#pandas
Вопрос:
У меня есть следующий фрейм данных
import pandas as pd
import numpy as np
d = {
'ID':[1,2,3],
'W1':[5,6,7],
'W2':[9, np.nan,10],
'w3':[11,np.nan,np.nan]
}
df = pd.DataFrame(data = d)
df
ID W1 W2 w3
0 1 5 9.0 11.0
1 2 6 NaN NaN
2 3 7 10.0 NaN
Я выполняю следующие операции
df['Sum1'] = (df[['W1','W2']]).sum(axis = 1)/2
df['Sum2'] = (df[['W2','w3']]).sum(axis = 1)/2
ID W1 W2 w3 Sum1 Sum2
0 1 5 9.0 11.0 7.0 10.0
1 2 6 NaN NaN 3.0 0.0
2 3 7 10.0 NaN 8.5 5.0
Как сделать Sum 2 идентификатора «2» как NaN вместо 0 после выполнения вышеуказанных операций??
Ответ №1:
Добавить параметр min_count=1
в DataFrame.sum
:
min_count : int, по умолчанию 0
Необходимое количество допустимых значений для выполнения операции. Если присутствует меньше значений min_count, отличных от NA, результат будет NA.Новое в версии 0.22.0: добавлено значение по умолчанию 0. Это означает, что сумма всех NA или пустых рядов равна 0, а произведение всех NA или пустых рядов равно 1.
df['Sum1'] = (df[['W1','W2']]).sum(axis = 1, min_count=1)/2
df['Sum2'] = (df[['W2','w3']]).sum(axis = 1, min_count=1)/2
print (df)
ID W1 W2 w3 Sum1 Sum2
0 1 5 9.0 11.0 7.0 10.0
1 2 6 NaN NaN 3.0 NaN
2 3 7 10.0 NaN 8.5 5.0
Но, кажется, вам нужно mean
s — тогда это работает как нужно:
df['Sum1'] = (df[['W1','W2']]).mean(axis = 1)
df['Sum2'] = (df[['W2','w3']]).mean(axis = 1)
print (df)
ID W1 W2 w3 Sum1 Sum2
0 1 5 9.0 11.0 7.0 10.0
1 2 6 NaN NaN 6.0 NaN
2 3 7 10.0 NaN 8.5 10.0
Комментарии:
1. первый ответ работает для меня! Что означает min_count=1? Когда-нибудь у меня может быть три или четыре столбца, будет ли ответ работать для этого?
2. @panda — Я думаю, да, если несколько столбцов заполнены только
NaNs
по строкам, это работает так же.