Вопрос об условном расчете в pandas - PullRequest
1 голос
/ 22 января 2020

У меня есть эта формула, я хотел превратить ее в pandas вычисление, формула очень проста: NEW = A(where v=1) + A(where v=3) + A(where v=5)

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

Type subType value   A           NEW
 X    a       1      3         =3+9+9=21
 X    a       3      9  
 X    a       5      9
 X    b       1      4         =4+5+0=9
 X    b       3      5 
 X    b       5      0
 Y    a       1      1         =1+2+3=6
 Y    a       3      2  
 Y    a       5      3
 Y    b       1      4         =4+5+2=11
 Y    b       3      5 
 Y    b       5      2

Два вопроса:

  1. Я знаю, что могу просто записать вычисление с указанной ячейкой, но я хочу, чтобы код выглядел лучше, есть ли другие способы получить значение?

  2. Поскольку для X & Y будет только два результата, как я могу добавить их в исходный кадр данных для дальнейшего расчета? (я думаю не добавлять их в фрейм данных, а просто использовать значение всякий раз, когда это необходимо для будущих вычислений) Совершенно новичок в кодировании, любой ответ будет оценен!

1 Ответ

2 голосов
/ 22 января 2020

Попробуйте:

>>> import pandas as pd
>>> df = pd.DataFrame({'Type':['X','X','X','Y','Y','Y'], 'value':[1,3,5,1,3,5], 'A':[3,9,4,0,2,2]})

>>> df
  Type  value  A
0    X      1  3
1    X      3  9
2    X      5  4
3    Y      1  0
4    Y      3  2
5    Y      5  2

>>> df.groupby('Type')['A'].sum()
Type
X    16
Y     4

>>> ur_dict = df.groupby('Type')['A'].sum().to_dict()
>>> df['NEW'] = df['Type'].map(ur_dict)
>>> df
  Type  value  A  NEW
0    X      1  3   16
1    X      3  9   16
2    X      5  4   16
3    Y      1  0    4
4    Y      3  2    4
5    Y      5  2    4

Надеюсь, что это поможет.

Редактировать, чтобы ответить на дополнительный запрос:

Вы отображаете ключи кортежей для серии, которая даст вам ошибка. Вы должны сдвинуть столбцы, в которые вы хотите отобразить свой словарь в качестве индекса, прежде чем выполнять отображение

См. Ниже:

>>> import pandas as pd
>>> df = pd.DataFrame({'Type':['X','X','X','X','X','X','Y','Y','Y','Y','Y','Y'], 'subType':['a','a','a','b','b','b','a','a','a','b','b','b'],'value':[1,3,5,1,3,5,1,3,5,1,3,5],'A':[3,9,9,4,5,0,1,2,3,4,5,2]})
>>> df
   Type subType  value  A
0     X       a      1  3
1     X       a      3  9
2     X       a      5  9
3     X       b      1  4
4     X       b      3  5
5     X       b      5  0
6     Y       a      1  1
7     Y       a      3  2
8     Y       a      5  3
9     Y       b      1  4
10    Y       b      3  5
11    Y       b      5  2

>>> df.groupby(['Type', 'subType'])['A'].sum()
Type  subType
X     a          21
      b           9
Y     a           6
      b          11
Name: A, dtype: int64
>>> ur_dict = df.groupby(['Type', 'subType'])['A'].sum().to_dict()
>>> ur_dict
{('X', 'a'): 21, ('X', 'b'): 9, ('Y', 'a'): 6, ('Y', 'b'): 11}

>>> df['NEW'] = df.set_index(['Type', 'subType']).index.map(ur_dict)
>>> df
   Type subType  value  A  NEW
0     X       a      1  3   21
1     X       a      3  9   21
2     X       a      5  9   21
3     X       b      1  4    9
4     X       b      3  5    9
5     X       b      5  0    9
6     Y       a      1  1    6
7     Y       a      3  2    6
8     Y       a      5  3    6
9     Y       b      1  4   11
10    Y       b      3  5   11
11    Y       b      5  2   11

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