создать новый фрейм данных на основе условий из существующего фрейма данных - PullRequest
1 голос
/ 10 апреля 2019

Я хочу создать новый фрейм данных с одним столбцом, содержащим 0 или 1, в зависимости от условия существующего фрейма данных.

В df (существующем) фрейме данных я хочу проверить, есть ли значения в столбцах a, bи c может содержать нули одновременно.Если это так, создайте новый фрейм данных с одним столбцом, который возвращает ноль, если условие выполнено.В противном случае верните 1.

Пример существующего фрейма данных:

df = pd.DataFrame({"a":[0,1,0,0],"b":[0,None,0,None],"c":[0,8,0,10],"new_col":[5,5,5,5]})
mylist = ['a','b','c']

if any((df[mylist] == 0).all(1).values):
    print('all zeros')
else:
    print('contains nonzero')

Я не могу понять, что я должен поставить вместо операторов печати, чтобы получить желаемые результаты.

Желаемый фрейм данных:

df_new = pd.DataFrame({'col':[0,1,0,1]})

Заранее спасибо!

1 Ответ

1 голос
/ 10 апреля 2019

Я считаю, что вам нужно изменить условие для проверки, не равной any:

df['out'] = (df[mylist] != 0).any(1).astype(int)
print (df)
   a    b   c  new_col  out
0  0  0.0   0        5    0
1  1  NaN   8        5    1
2  0  0.0   0        5    0
3  0  NaN  10        5    1

Если нужен новый DataFrame:

df1 = (df[mylist] != 0).any(1).astype(int).to_frame('col')
print (df1)
   col
0    0
1    1
2    0
3    1

Это должно использовать "if "оператор

В пандах используется if-else функция из numpy - numpy.where:

df['out'] = np.where((df[mylist] != 0).any(1), 1, 0)
print (df)
   a    b   c  new_col  out
0  0  0.0   0        5    0
1  1  NaN   8        5    1
2  0  0.0   0        5    0
3  0  NaN  10        5    1

Решение с if-else являетсятакже возможно, но не используйте его, потому что медленно:

out = []

for x in (df[mylist] == 0).all(1).values:
    if np.any(x):
        out.append(0)
    else:
        out.append(1)

df['out'] = out
print (df)
   a    b   c  new_col  out
0  0  0.0   0        5    0
1  1  NaN   8        5    1
2  0  0.0   0        5    0
3  0  NaN  10        5    1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...