Как использовать лямбда-функцию для выбора больших значений из двух python данных, сравнивая их по дате? - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу отобразить строки df1 и сравнить их со значениями df2 по месяцам и дням за каждый год в df2, оставив только значения в df1, которые больше, чем в df2, для добавления в Новый столбец, «Новый». df1 и df2 имеют одинаковый размер и индексируются по месяцам и дням. что было бы лучшим способом сделать это?

df1=pd.DataFrame({'Date':['2015-01-01','2015-01-02','2015-01-03','2015-01-``04','2005-01-05'],'Values':[-5.6,-5.6,0,3.9,9.4]})

df1.Date=pd.to_datetime(df1.Date) df1['Day']=pd.DatetimeIndex(df1['Date']).day df1['Month']=pd.DatetimeIndex(df1['Date']).month df1.set_index(['Month','Day'],inplace=True) df1

df2 = pd.DataFrame({'Date':['2005-01-01','2005-01-02','2005-01-03','2005-01-``04','2005-01-05'],'Values':[-13.3,-12.2,6.7,8.8,15.5]})

df2.Date=pd.to_datetime(df1.Date) df2['Day']=pd.DatetimeIndex(df2['Date']).day df2['Month']=pd.DatetimeIndex(df2['Date']).month df2.set_index(['Month','Day'],inplace=True) df2

df1 и df2

df2['New']=df2[df2['Values']<df1['Values']]

дает ValueError: Can only compare identically-labeled Series objects

Я также пробовал df2['New']=df2[df2['Values'].apply(lambda x: x < df1['Values'].values)]

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Давайте попробуем два возможных решения:

Первое решение - сначала отсортировать индекс.

df1.sort_index(inplace=True)
df2.sort_index(inplace=True)

Выполните простой тест, чтобы проверить, работает ли он!

df1 == df2

возможно вызвать какую-то ошибку, поэтому, если это произойдет, попробуйте выполнить следующее исправление:

df1.sort_index(inplace=True, axis=1)
df2.sort_index(inplace=True, axis=1)

Второе решение - сбросить индексы и сбросить их:

df1.sort_index(inplace=True)
df2.sort_index(inplace=True)

Выполните простой тест, чтобы проверить, работает ли он!

df1 == df2

Проверьте, работает ли он, и сообщите нам результат.

0 голосов
/ 23 апреля 2020

Лучший способ решить вашу проблему - использовать numpy в качестве инструмента. Numpy имеет атрибут "where", который очень помогает в подобных случаях.

Вот как работает предложение:

df1['new column that will contain the comparison results'] = np.where(condition,'value if true','value if false').

Сначала импортируйте библиотеку:

import numpy as np

Используя предоставленное вами условие:

df2['New'] = np.where(df2['Values'] > df1['Values'], df2['Values'],'')

Итак, я думаю, что это решает вашу проблему ... Вы можете изменить значение, переданное условию False, на любое значение, которое вы хотите, это только пример.

Скажите, сработало ли это!

...