Сравните два столбца в одном кадре данных - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу сравнить два клоуна в одном и том же фрейме данных и вычислить сумму
это мой код:

sum=0
if df1['sma'] < df1['H+L'] :
        sum=sum + df1['H+L']
        print (sum)

это мой фрейм данных:

df1 = pd.DataFrame({'sma':[1, 5, 2],
                    'Low':[1,2,3],
                    'H+L':[10, 20, 0]}, 
                    index=pd.date_range('2018-11-30', periods=3)).T
print (df1)
     2018-11-30  2018-12-01  2018-12-02
sma           1           5           2
Low           1           2           3
H+L          10          20           0

выводэто сумма всех строк.Но всегда я получаю это сообщение об ошибке

Значение истинности Серии неоднозначно.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Я не могу понять проблему.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Следующее должно работать;

df1.apply(lambda x: x['H+L'] if x['sma']<x['H+L'] else 0, axis = 1).sum()
0 голосов
/ 03 декабря 2018

Полагаю, вам нужен фильтр по boolean indexing с loc и использование sum:

df1 = pd.DataFrame({'sma':[1, 5, 2],
                   'H+L':[10, 20, 0]})
print (df1)
   sma  H+L
0    1   10
1    5   20
2    2    0

print (df1.loc[df1['sma'] < df1['H+L'],'H+L']))
0    10
1    20
Name: H+L, dtype: float64

out = df1.loc[df1['sma'] < df1['H+L'],'H+L'].sum()
print (out)
30

При работе со строками:

df1 = pd.DataFrame({'sma':[1, 5, 2],
                   'H+L':[10, 20, 0]}).T
print (df1)
      0   1  2
sma   1   5  2
H+L  10  20  0

out = df1.loc['H+L', df1.loc['sma'] < df1.loc['H+L']].sum()
print (out)
30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...