Ошибка Python: значение истинности Series неоднозначно в выражении if - PullRequest
0 голосов
/ 10 октября 2019

У меня проблема со сравнением значений двух фреймов данных в день. Кадры данных содержат df1 = минимальные значения температуры в день и df2 = максимальные значения температуры в день.

DFS выглядят так (TS_TIMESTAMP - столбец индекса):

df1:

> TS_TIMESTAMP              Date        TREND_VALUE             
> 2019-04-03 18:48:10.970  2019-04-02   8.340000        
> 2019-04-04 16:49:23.320  2019-04-03   7.840000           
> 2019-04-05 13:19:33.550  2019-04-04   7.480000 

df2:

> TS_TIMESTAMP              Date        TREND_VALUE             
> 2019-04-03 18:48:10.970  2019-04-02   19.340000        
> 2019-04-04 16:49:23.320  2019-04-03   18.840000          
> 2019-04-05 13:19:33.550  2019-04-04   18.480000   

Я хотел бы рассчитать разницу между max_value и min_value в день с помощью функции (чтобы просто выполнить расчет с несколькими различными файлами).

Это то, что я придумал:

def temp_diff (df1, df2):
    for row in df1, df2:
        if df1.Date == df2.Date:
            print (df2.TREND_VALUE - df1.TREND_VALUE)

если я запускаю эту функцию, я получаю это сообщение об ошибке для оператора if: ValueError: Истинное значение Series является неоднозначным. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Я не уверен, как правильно изменить свою защиту.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Если вы используете условие all, оно будет напечатано, когда all значения в df1 ['Date'] и df2 ['Date'] равны. Если это то, что вам нужно, вы идете:

def temp_diff (df1, df2):
    for row in df1, df2:
        if (df1.Date == df2.Date).all():
            print (df1.TREND_VALUE - df2.TREND_VALUE)

У меня такое чувство, что вы хотите перебрать каждую строку и проверить, есть ли совпадения для df1['Date'] и df2['Date'], чтобы, если есть, вывестиразница, иначе пропустите этот ряд. Дайте мне знать в комментариях, если это то, что вы хотите, тогда я отредактирую этот ответ.

import pandas as pd
a = {'Date':['2019-04-02','2019-04-03','2019-04-04'],'Values':[8,7,4]}
b = {'Date':['2019-04-02','2019-04-03','2019-04-04'],'Values':[19,18,17]}
df_1 = pd.DataFrame(a)
df_2 = pd.DataFrame(b)

def temp_diff (df1, df2):
    for row in df1, df2:
        if (df1.Date == df2.Date).all():
            print (df1.Values - df2.Values)

temp_diff(df_1,df_2)

Вывод:

0   -11
1   -11
2   -13
Name: Values, dtype: int64

Редактировать

Может быть, эточто вы ищете?

import pandas as pd
import numpy as np
a = {'Date':['2019-04-02','2019-04-03','2019-04-04'],'TREND_VALUE':[8,7,4]}
b = {'Date':['2019-04-02','2019-04-03','2019-04-05'],'TREND_VALUE':[19,18,17]}
df1 = pd.DataFrame(a)
df2 = pd.DataFrame(b)
df1['T_Amplitude'] = np.where((df1['Date'] == df2['Date']),df1['TREND_VALUE']-df2['TREND_VALUE'],np.nan)
print(df_1)

Вывод:

         Date  TREND_VALUE  T_Amplitude
0  2019-04-02            8        -11.0
1  2019-04-03            7        -11.0
2  2019-04-04            4          NaN
0 голосов
/ 10 октября 2019

Предполагая, что количество строк в кадре данных одинаково, вы просто вычитаете два столбца:

df1.TREND_VALUE - df2.TREND_VALUE
...