Найти разницу в датах среди записей в нескольких столбцах - PullRequest
0 голосов
/ 15 декабря 2018

df1 =

Date     Team1     Team2
6/1      Boston    New York
6/13     New York  Boston
6/27     Boston    New York

Я пытаюсь подсчитать количество дней с момента последнего появления Бостона в каждом столбце, но я могу только выяснить, как искать его в одном столбце, используя df1['Дни с тех пор, как играл в Бостоне'] = df1.groupby ('Team1') ['Date']. Diff (). Fillna (0)

То, что я хотел бы получить:

Date     Team1     Team2      Days since Boston played
6/1      Boston    New York   0
6/13     New York  Boston     12
6/27     Boston    New York   14

РЕДАКТИРОВАТЬ - расширяя фрейм данных, чтобы узнать, как это можно применить ко всем командам, а не только к одной . Как я хотел бы получить:

Date     Team1     Team2      Days since **Team1** played
6/1      Boston    New York   0
6/13     New York  Chicago    12
6/27     Boston    New York   14
6/28     Chicago   Boston     15

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Используйте isin, чтобы проверить, присутствует ли Бостон в team1 или team2 и найти timedelta

df['Date'] = pd.to_datetime(df['Date'], format = '%m/%d')

df.loc[df.isin(['Boston']).any(1),'Days since Boston played'] = df.loc[df.isin(['Boston']).any(1), 'Date'].diff().dt.days


    Date        Team1       Team2       Days since Boston played
0   1900-06-01  Boston      New York    NaN
1   1900-06-13  New York    Boston      12.0
2   1900-06-27  Boston      New York    14.0

Если вы хотите вернуть столбец даты в исходном формате, вы можете использовать strftime

df['Date'] = df['Date'].dt.strftime('%m/%d')

    Date    Team1       Team2       Days since Boston played
0   06/01   Boston      New York    NaN
1   06/13   New York    Boston      12.0
2   06/27   Boston      New York    14.0
0 голосов
/ 15 декабря 2018

Вы можете сделать групповую игру в Team1, а затем внести разницу в даты:

# Note: you should post a creatable example in your post next time 
data = {
    'Date': ['2018-06-01', '2018-06-13', '2018-06-27'],
    'Team1':['Boston', 'New York', 'Boston'], 
    'Team2':['New York', 'Boston', 'New York']
}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
df['Time between games'] = df.groupby('Team1')['Date'].diff().fillna(0)

Это фактически даст вам разницу между играми для всех домашних команд.

...