Поиск значений из одного кадра данных в другом и возврат информации в соответствующей строке / другом столбце - PullRequest
0 голосов
/ 31 марта 2020

У меня есть 2 кадра данных:

df_Billed: pd.Dataframe({'Bill_Number':[220119, 220120, 220219, 220219, 220419, 220519, 220619, 221219],'Date': [1/31/2019, 2/20/2020, 2/28/2019, 6/30/2019,6/30/2019,6/30/2019,6/30/2019,12/31/2019], 'Amount': [3312.5, 832.0,10000.0, -3312.5,8725.0,1862.5,3637.5,1587.5]})

df_Received: pd.Dataframe({'Bill_Number':[220119, 220219, 220419, 220519, 220619],'Date':[4/16/2019,5/21/2019,8/2/2019,8/2/2019,8/2/2019],'Amount':[3312.5,6687.5,8725,1862.5,3637.5]})

Я пытаюсь найти каждый "Bill_Number" в df_Billed, чтобы увидеть, присутствует ли он, если df_Received. В идеале, если он присутствует, я хотел бы взять разницу между датами между df_Billed и df_Received для этого конкретного номера счета (чтобы узнать, сколько дней понадобилось, чтобы получить оплату). Если номер платежа отсутствует в df_Received, я хотел бы просто вернуть все строки для этого номера платежа в df_Billed.

EX: Since df_Billed Bill_Number 220119 is in df_Received, it would return 75 (which is the number of days it took for the bill to be paid 4/16/2019 - 1/31/2019). 

EX: Since df_Billed Bill_Number 221219 is not in df_Received, it would return 12/31/2019 (which is the date it was billed). 

1 Ответ

2 голосов
/ 01 апреля 2020

Возможно, вы могли бы сначала использовать слияние для Bill_Number

df_Billed=df_Billed.merge(df_Received,on='Bill_Number',how='left')

Затем используйте apply и pandas .to_datetime для вычисления diffrence между датами

df_Billed['result']=df_Billed.apply(lambda x:x.Date_x if pd.isnull(x.Date_y) 
                    else abs(pd.to_datetime(x.Date_x)-pd.to_datetime(x.Date_y)).days, 
                    axis=1)

И, наконец, я думаю, что вы хотите создать новый столбец для конечного результата ... поэтому я переименовываю объединенные столбцы Date_x и Amount_y в Date и Amount ниже:

df_Billed.drop(['Date_y','Amount_y'],axis=1,inplace=True)
df_Billed.rename(columns={"Date_x": "Date","Amount_x":"Amount"},inplace=True)

Конечный кадр данных:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...