Цикл For со встроенным оператором if для обновления кадра данных - PullRequest
0 голосов
/ 28 сентября 2018

Я новичок в питоне.Я хочу реализовать цикл «For» для элементов информационного кадра со встроенным оператором «if».

Код:

import numpy as np
import pandas as pd

#Dataframes
x = pd.DataFrame([1,-2,3])
y = pd.DataFrame()

for i in x.iterrows():
    for j in x.iteritems():
        if x>0:
            y = x*2
        else:
            y = 0

В предыдущем цикле я хочу перейтичерез каждый элемент в x dataframe и генерировать новый dataframe y на основе условия в операторе if.Когда я запускаю код, я получаю следующее сообщение об ошибке.

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы можете попробовать это:

y = (x[(x > 0)]*2).fillna(0)
0 голосов
/ 28 сентября 2018

В пандах лучше всего избегать циклов, если существует векторизованное решение:

x = pd.DataFrame([1,-2,3], columns=['a'])

y = pd.DataFrame(np.where(x['a'] > 0, x['a'] * 2, 0), columns=['b'])
print (y)
   b
0  2
1  0
2  6

Пояснение :

Первый столбец сравнения по значению для логической маски:

print (x['a'] > 0)
0     True
1    False
2     True
Name: a, dtype: bool

Затем используйте numpy.where для установки значений по условиям:

print (np.where(x['a'] > 0, x['a'] * 2, 0))
[2 0 6]

И последний раз используйте конструктор DataFrame или создайте новый столбец:

x['new'] = np.where(x['a'] > 0, x['a'] * 2, 0)
print (x)
   a  new
0  1    2
1 -2    0
2  3    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...