Pandas-조건에 따라 2 개 열의 X 마지막 값을 합산하는 방법

stahoooo

최근에 나는 판다를 배우기 시작했습니다. 나는 정말로 해결책을 얻으려고 노력했지만 찾을 수 없었습니다. 여기에 문제가 있습니다.

데이터 프레임이 있습니다. 간단한 축구 데이터입니다. 각 팀에 대해 이전 2 경기에서 득점 한 골 수를 알고 싶습니다. 홈 팀이든 어웨이 팀이든 상관 없습니다. 따라서 각 팀에 대해 2 개의 다른 열에서 특정 수의 값을 합산해야합니다.

샘플 데이터 :

import pandas as pd
data = [['2018-02-03', 'manutd', 'chelsea', 3, 1], ['2018-02-08', 'arsenal', 'liverpool', 1, 1], 
        ['2018-01-12', 'chelsea', 'westham', 2, 0], ['2018-01-12', 'liverpool', 'manutd', 0, 2], 
        ['2018-03-15', 'arsenal', 'chelsea', 2, 2], ['2018-02-20', 'manutd', 'brighton', 0, 0], 
        ['2018-04-01', 'westham', 'fulham', 1, 0], ['2018-03-15', 'manutd', 'westham', 2, 1]] 
df = pd.DataFrame(data, columns = ['event_time', 'home_team', 'away_team', 'home_goals', 'away_goals'])
df['event_time'] = pd.to_datetime(df['event_time'])
df.sort_values(['event_time'],inplace=True, ascending=False)
print(df)


  event_date  home_team  away_team  home_goals  away_goals
6 2018-04-01    westham     fulham           1           0
4 2018-03-15    arsenal    chelsea           2           2
7 2018-03-15     manutd    westham           2           1
5 2018-02-20     manutd   brighton           0           0
1 2018-02-08    arsenal  liverpool           1           1
0 2018-02-03     manutd    chelsea           3           1
2 2018-01-12    chelsea    westham           2           0
3 2018-01-12  liverpool     manutd           0           2

내가 이루고 싶은 것 :

  event_time  home_team  away_team  home_goals  away_goals  h_goals_previous_2  a_goals_previous_2
6 2018-04-01    westham     fulham           1           0                  1                  NaN
4 2018-03-15    arsenal    chelsea           2           2                  1                    3
7 2018-03-15     manutd    westham           2           1                  3                    0
5 2018-02-20     manutd   brighton           0           0                  5                  NaN
1 2018-02-08    arsenal  liverpool           1           1                NaN                    0
0 2018-02-03     manutd    chelsea           3           1                  2                      2
2 2018-01-12    chelsea    westham           2           0                NaN                  NaN
3 2018-01-12  liverpool     manutd           0           2                NaN                  NaN

설명 :-2018-03-15 아스날은 첼시와 경기했습니다. 지난 2 경기에서 첼시는 어웨이 팀일 때 1 골, 홈 팀일 때 2 골로 총 3 골을 기록했습니다. -이전 경기에 대한 데이터가 없기 때문에 이전 골 중 일부는 Nan입니다.

팀별로 팀을 반복하여 수행하려고했고 각 팀에 대해 정렬 된 df 하위 집합을 만든 다음 값을 집계 할 수 있었지만 최상의 솔루션이 아니라고 생각하고 멋진 Pandas 표현식을 사용하여 수행 할 수 있습니다.

teams = pd.unique(df[['home_team', 'away_team']].values.ravel('K'))
for team in teams:
    print(team)
    team_df = df[(df['home_team']==team) | (df['away_team']==team)]
    team_df.sort_values(['event_date'],inplace=True, ascending=False)
    print(team_df)

루프와 if를 작성하지 않고 어떻게 할 수 있습니까?

Ansev

방법 1 : pd.wide_to_long:

#Create a df2 with index like a column a rename the columns to apply:
# pd.wide_to_long

df2=df.set_index('event_time',append=True)
df2.columns=[''.join(name[::-1]) for name in  df2.columns.str.split('_')]
df2.columns=df2.columns.str.replace('home','1').str.replace('away','2')
df2=df2.reset_index()

#Using pd.wide_to_long
df_long=( pd.wide_to_long(df2,['team','goals'],i='level_0',j='key')
          .sort_values('event_time',ascending=False) )
print(df_long)


            event_time       team  goals
level_0 key                             
6       1   2018-04-01    westham      1
        2   2018-04-01     fulham      0
4       1   2018-03-15    arsenal      2
7       1   2018-03-15     manutd      2
4       2   2018-03-15    chelsea      2
7       2   2018-03-15    westham      1
5       1   2018-02-20     manutd      0
        2   2018-02-20   brighton      0
1       1   2018-02-08    arsenal      1
        2   2018-02-08  liverpool      1
0       1   2018-02-03     manutd      3
        2   2018-02-03    chelsea      1
2       1   2018-01-12    chelsea      2
3       1   2018-01-12  liverpool      0
2       2   2018-01-12    westham      0
3       2   2018-01-12     manutd      2

#calculating the sum
groups_goals=df_long.groupby('team')['goals']
df_long=df_long.assign(value_2_sum=groups_goals.shift(-1)+groups_goals.shift(-2))

#Getting goals previous columns
goals_previous=df_long.pivot_table(index='level_0',columns='key',values='value_2_sum',dropna=False)

df[['h_goals_previous_2',  'a_goals_previous_2']]=goals_previous
print(df)

방법 2 : DataFrame.melt

cols=['h_goals_previous_2',  'a_goals_previous_2']
df2=( df.reset_index()
        .melt(['event_time','home_team','away_team','index'])
        .sort_values('event_time',ascending=False) )
df2['team']=df2['home_team'].mask(df2['variable'].eq('away_goals'),df2['away_team'])

groups_goals=df2.groupby('team')['value']

df2['value_2']=groups_goals.shift(-2)+groups_goals.shift(-1)
df[cols]=( df2.pivot_table(columns='variable',index='index',values='value_2',dropna=False)
              .sort_index(axis=1,ascending=False) )
print(df)

산출:

  event_time  home_team  away_team  home_goals  away_goals  \
6 2018-04-01    westham     fulham           1           0   
4 2018-03-15    arsenal    chelsea           2           2   
7 2018-03-15     manutd    westham           2           1   
5 2018-02-20     manutd   brighton           0           0   
1 2018-02-08    arsenal  liverpool           1           1   
0 2018-02-03     manutd    chelsea           3           1   
2 2018-01-12    chelsea    westham           2           0   
3 2018-01-12  liverpool     manutd           0           2   

   h_goals_previous_2  a_goals_previous_2  
6                 1.0                 NaN  
4                 NaN                 3.0  
7                 3.0                 NaN  
5                 5.0                 NaN  
1                 NaN                 NaN  
0                 NaN                 NaN  
2                 NaN                 NaN  
3                 NaN                 NaN  

데이터 프레임에 표시된 행만 사용했기 때문에 NaN 값이 더 많이 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

pandas 마지막 요소의 조건에 따라 값을 유지하거나 열 값을 변경하는 방법

분류에서Dev

PHP의 마지막 열에 따라 배열 값을 계산하는 방법

분류에서Dev

Pandas : 다른 열 값의 조건에 따라 열을 합산하는 방법은 무엇입니까?

분류에서Dev

Pandas의 기간 조건에 따라 열을 계산하는 방법

분류에서Dev

열의 조건에 따라 행 값을 변경하는 방법 (python, pandas)

분류에서Dev

Python Pandas에서 마지막 5 개 행의 평균을 계산하는 방법

분류에서Dev

SQL을 사용하여 2 개 열의 조건에 따라 중복을 삭제하는 방법

분류에서Dev

R의 특정 조건에 따라 몇 개의 열을 변경하는 방법

분류에서Dev

Pandas는 행의 조건에 따라 값을 계산합니다.

분류에서Dev

부울 조건에 따라 팬더의 값을 합산하는 방법

분류에서Dev

Pandas의 여러 조건에 따라 행당 열을 선택하는 방법

분류에서Dev

Pandas : 다른 열 값의 조건에 따라 다른 열을 합산하는 열을 어떻게 만드나요?

분류에서Dev

pandas python : 열의 조건에 따라 추가하는 방법?

분류에서Dev

Pandas : 2 개 열의 조건에 따라 그룹 별 행 비교

분류에서Dev

다른 열의 값에 따라 열을 계산 / 합산하는 방법

분류에서Dev

두 개의 다른 열에 설정된 일부 조건에 따라 Pandas 데이터 프레임의 열을 채우는 방법은 무엇입니까?

분류에서Dev

조건 결과에 따라 Pandas DataFrame에 열을 추가하는 방법

분류에서Dev

모든 행의 조건에 따라 np 2d 배열의 값을 바꾸는 방법

분류에서Dev

Excel : sheet1의 값이 sheet2의 값과 일치하는지 여부에 따라 sheet2의 값을 합산하는 방법

분류에서Dev

조건에 따라 열의 값을 다른 열로 설정하는 방법

분류에서Dev

조건에 따라 목록의 값을 확인하는 방법

분류에서Dev

Scala의 특정 조건에 따라 값을 계산하는 방법

분류에서Dev

Pandas의 조건에 따라 데이터 프레임 하위 집합의 열에 값을 할당하는 방법은 무엇입니까?

분류에서Dev

열 값의 조건에 따라 DataFrame에서 행을 삭제하는 방법

분류에서Dev

cakephp의 다른 열 값에 따라 값을 합산하는 방법

분류에서Dev

Pandas-2 개의 열을 비교하고 우선 순위에 따라 값을 선택합니다.

분류에서Dev

특정 열의 조건에 따라 두 개의 데이터 프레임을 곱하는 효율적인 방법

분류에서Dev

조건에 따라 열의 숫자와 값을 연결하는 방법

분류에서Dev

조건에 따라 배열의 중첩 된 개체에 속성을 추가하는 방법

Related 관련 기사

  1. 1

    pandas 마지막 요소의 조건에 따라 값을 유지하거나 열 값을 변경하는 방법

  2. 2

    PHP의 마지막 열에 따라 배열 값을 계산하는 방법

  3. 3

    Pandas : 다른 열 값의 조건에 따라 열을 합산하는 방법은 무엇입니까?

  4. 4

    Pandas의 기간 조건에 따라 열을 계산하는 방법

  5. 5

    열의 조건에 따라 행 값을 변경하는 방법 (python, pandas)

  6. 6

    Python Pandas에서 마지막 5 개 행의 평균을 계산하는 방법

  7. 7

    SQL을 사용하여 2 개 열의 조건에 따라 중복을 삭제하는 방법

  8. 8

    R의 특정 조건에 따라 몇 개의 열을 변경하는 방법

  9. 9

    Pandas는 행의 조건에 따라 값을 계산합니다.

  10. 10

    부울 조건에 따라 팬더의 값을 합산하는 방법

  11. 11

    Pandas의 여러 조건에 따라 행당 열을 선택하는 방법

  12. 12

    Pandas : 다른 열 값의 조건에 따라 다른 열을 합산하는 열을 어떻게 만드나요?

  13. 13

    pandas python : 열의 조건에 따라 추가하는 방법?

  14. 14

    Pandas : 2 개 열의 조건에 따라 그룹 별 행 비교

  15. 15

    다른 열의 값에 따라 열을 계산 / 합산하는 방법

  16. 16

    두 개의 다른 열에 설정된 일부 조건에 따라 Pandas 데이터 프레임의 열을 채우는 방법은 무엇입니까?

  17. 17

    조건 결과에 따라 Pandas DataFrame에 열을 추가하는 방법

  18. 18

    모든 행의 조건에 따라 np 2d 배열의 값을 바꾸는 방법

  19. 19

    Excel : sheet1의 값이 sheet2의 값과 일치하는지 여부에 따라 sheet2의 값을 합산하는 방법

  20. 20

    조건에 따라 열의 값을 다른 열로 설정하는 방법

  21. 21

    조건에 따라 목록의 값을 확인하는 방법

  22. 22

    Scala의 특정 조건에 따라 값을 계산하는 방법

  23. 23

    Pandas의 조건에 따라 데이터 프레임 하위 집합의 열에 값을 할당하는 방법은 무엇입니까?

  24. 24

    열 값의 조건에 따라 DataFrame에서 행을 삭제하는 방법

  25. 25

    cakephp의 다른 열 값에 따라 값을 합산하는 방법

  26. 26

    Pandas-2 개의 열을 비교하고 우선 순위에 따라 값을 선택합니다.

  27. 27

    특정 열의 조건에 따라 두 개의 데이터 프레임을 곱하는 효율적인 방법

  28. 28

    조건에 따라 열의 숫자와 값을 연결하는 방법

  29. 29

    조건에 따라 배열의 중첩 된 개체에 속성을 추가하는 방법

뜨겁다태그

보관