оператор if между значениями двух панд - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу сделать оператор if со значениями двух фреймов данных панд (значения, которые я хочу сравнить, указаны в столбце 0):

РЕДАКТИРОВАТЬ:

Прежде всего, я хотелчтобы проверить, сколько раз значение df1 больше значения df2.

for row in df1:
    if df1[0] > df2[0]:
       Print('Ok')
    else:
       Print('not OK')

и получаю:

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

РЕДАКТИРОВАТЬ № 2:

СУ меня не было времени, чтобы попробовать все ваши предложения, и из-за того, что мне нужно было быстрое решение, вот что я получил вместе:

excessLoadB1l=[]

indexYB1=loadC1C2B1.index.tolist()

tempLB1=energyBalanceB1['sumSupply_B1'].tolist()

for item in tempLB1:

    if item < 0:

        item=item

    else:

        item=0

    excessLoadB1l.append(item)

excessLoadB1=pd.DataFrame({'excessLoadB1':excessLoadB1l}).set_index([indexYB1])

Я создал список из положительных и отрицательных значений

tempLB1 = energyBalanceB1 ['sumSupply_B1']. Tolist ()

, который я хотел разделить на два разных кадра данных.Я позаимствовал индекс у

indexYB1 = loadC1C2B1.index.tolist ()

и для положительных значений:

excessSupplyB1l=[]

indexZB1=loadC1C2B1.index.tolist()

tempSB1=energyBalanceB1['sumSupply_B1'].tolist()

for item in tempSB1:

    if item > 0:

        item=item

    else:

        item=0

    excessSupplyB1l.append(item)


excessSupplyB1=pd.DataFrame({'excessSupplyB1':excessSupplyB1l}).set_index([indexZB1])

Ответы [ 4 ]

0 голосов
/ 22 ноября 2018

Не совсем точно, что вы ищете.

Если вы сравниваете отдельные столбцы из разных фреймов данных:

df1[0].gt(df2[0])

Если вы сравниваете все столбцы одного фрейма данных с одним столбцомс другого фрейма данных:

df1.gt(df2[0], axis=0)

Если вы сравниваете все столбцы в двух фреймах данных:

df1.gt(df2)

Добавьте это к любому из вышеперечисленных, чтобы получить вместо "Ok" и "not OK"Истина, Ложь:

.replace([1, 0], ['Ok', 'not OK'])
0 голосов
/ 22 ноября 2018

чуть быстрее

for i, j in enumerate(df.itertuples()):
    if j[0] > df1[0].iloc[i]:
        print("OK")
    else:
        print("Not OK")
0 голосов
/ 22 ноября 2018

Вы можете объединить два кадра данных, а затем добавить столбец с np.where:

df['result'] = np.where(df1['column1'] > df2['column2'], 'ok', 'not ok')

+

df[df.result == 'ok'].count()  

дополнительно, заимствуя из b2002;

df_ = df1[0].gt(df2[0])
(df_ == 1).sum()
0 голосов
/ 22 ноября 2018
count = 0    

for i, row in df1.iterrows():
    if row[0] > df2.loc[i,0]:
        print('Ok')
        count += 1

    else:
        print('not OK')

print ('%d times item in df1 was greater than df2' %count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...