Как я могу выполнять поиск по фреймворку данных на основе имени пользователя и даты из словаря - PullRequest
2 голосов
/ 16 июня 2020

У меня есть словарь, который содержит имена пользователей как ключи и даты как значения.

my_dict = {'User1': '06/01/2020 01:09:42', 'User2': '06/01/2020 01:04:42'}

Как мне найти в словаре вхождения каждого пользователя до и после даты?

My dataframe выглядит примерно так:

Username Date
User1 06/01/2020 00:40:41
User1 06/01/2020 00:45:42
User2 06/01/2020 00:54:42
User2 06/01/2020 01:04:42
User1 06/01/2020 01:08:42
User1 06/01/2020 01:09:42
User2 06/01/2020 02:10:42
User1 06/01/2020 04:10:42
User2 06/01/2020 05:10:42

Перед тем, как мне нужно иметь:

Username Date
User1 06/01/2020 00:40:41
User1 06/01/2020 00:45:42
User2 06/01/2020 00:54:42
User1 06/01/2020 01:08:42

Для после и того же мне нужно иметь:

Username Date
User2 06/01/2020 01:04:42
User1 06/01/2020 01:09:42
User2 06/01/2020 02:10:42
User1 06/01/2020 04:10:42
User2 06/01/2020 05:10:42

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Мы можем сделать это, используя pd.DataFrame.merge и некоторую фильтрацию. Здесь я собираюсь использовать .lo c с простой лямбда-функцией:

# First, let's create a dataframe from your dictionary:
my_dict = {'User1': '06/01/2020 01:09:42', 'User2': '06/01/2020 01:04:42'}
dfm = pd.DataFrame.from_dict(my_dict, orient='index')
dfm[0] = pd.to_datetime(dfm[0])

# Next, merge your original dataframe with the dataframe, dfm:
df_result = df.merge(dfm, right_index=True, left_on='Username')

# Now, filter for date condition before:
df_before = df_result.loc[lambda x: x['Date']<x[0], df.columns].sort_index()
df_before

Вывод:

  Username                Date
0    User1 2020-06-01 00:40:41
1    User1 2020-06-01 00:45:42
2    User2 2020-06-01 00:54:42
4    User1 2020-06-01 01:08:42

А теперь после:

df_after = df_result.loc[lambda x: x['Date']>=x[0], df.columns].sort_index()
df_after

Выход:

  Username                Date
3    User2 2020-06-01 01:04:42
5    User1 2020-06-01 01:09:42
6    User2 2020-06-01 02:10:42
7    User1 2020-06-01 04:10:42
8    User2 2020-06-01 05:10:42
0 голосов
/ 16 июня 2020
import pandas as pd

def process(my_dict,date='2020-03-25 00:00:00'): #give date string here
    c = []
    for each_key in my_dict.keys():
        c.append([each_key,my_dict[each_key]])
    df = pd.DataFrame(c)
    time_mod = pd.Timestamp(date)
    df[1] = df[1].apply(lambda x:pd.Timestamp(x))
    df_after = df.loc[df[1] >= time_mod]
    df_before = df.loc[df[1] < time_mod] 
    print(df_after, df_before)
    return df_after,df_before

Использование функции: передайте словарь и дату в виде строки (здесь я взял 25 марта в качестве примера), вы хотите разделить свои данные на до и после функции, эта функция возвращает два фрейма данных, один раз содержащие данные с датами до даты ввода и другие, содержащие данные после даты ввода.

...