Панды, добавляющие только две строки внутри группы - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь добавить две строки в группы, например:

ID   DATE   NUMBER 
1   2012-10-11   5 
1   2012-10-12   4 
1   2012-10-13   3 
2   2012-10-11   2 
2   2012-10-12   1 
2   2012-10-13   6

Я хочу добавить только 2012-10-13 к 2012-10-12. И после этого просто удалите 2012-10-13. Конечный результат:

ID   DATE   NUMBER 
1   2012-10-11   5 
1   2012-10-12   7 (4+3) 
2   2012-10-11   2 
2   2012-10-12   7 (6+1)

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018
Import pandas as pd 

## First change the date

for i in range(len(df)): 
    if df.loc[i,'DATE'] == "2012-10-13":
        df.loc[i,'DATE'] = "2012-10-12"

## Then do a groupby sum 

df = pd.DataFrame({'SUM' : df.groupby(['ID','DATE'])['NUMBER'].sum()})

мой вывод:

               SUM
ID DATE           
1  2012-10-11    5
   2012-10-12    7
2  2012-10-11    2
   2012-10-12    7
0 голосов
/ 02 ноября 2018

Конкретная дата эквивалентности

  • Используйте словарь, чтобы указать эквивалентность
  • Используйте replace, чтобы поменять их
  • Используйте groupby как обычно

df.replace({'DATE': {'2012-10-13': '2012-10-12'}}) \
  .groupby(['ID', 'DATE'], as_index=False).sum()

   ID        DATE  NUMBER
0   1  2012-10-11       5
1   1  2012-10-12       7
2   2  2012-10-11       2
3   2  2012-10-12       7
0 голосов
/ 02 ноября 2018

ВНИМАНИЕ: приведенный выше код выполняет вашу работу, но НЕ является эволюционным!

# I want to groupby ID excluding the line for 2012-10-11
df1 = df.loc[df.DATE != '2012-10-11']

# 1 - df1.groupby('ID').sum() -> I groupby ID to get the sum
# 2 - df1.drop('NUMBER', axis=1) -> I drop the col NUMBER to avoid overlaping columns
# 3 I merge the to df to get the sum value for every initial lines
df1 = df1.drop('NUMBER', axis=1).merge(df1.groupby('ID').sum(), on='ID')

# I get back the ligne for 2012-10-11
df1 = df1.append(df.loc[df.DATE == '2012-10-11'], sort=True)
df1 = df1.sort_values(['ID', 'DATE'])

# I delete the line I don't want
df1 = df1.loc[df1.DATE != '2012-10-13']

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