Как суммировать два столбца вместе на основе значения другого столбца, используя Pandas - PullRequest
0 голосов
/ 17 марта 2020

Я бы хотел воспроизвести столбец «требуемый_отход», используя Pandas. По сути, каждый раз, когда «A cc Type» равен O, я должен был бы взять сумму баланса и суммы.

+--------+----------+-------+---------+--------+----------+-----------------+
| MainID |   Date   | SubID | Balance | Amount | Acc Type | desired_outcome |
+--------+----------+-------+---------+--------+----------+-----------------+
|      1 | 1/1/2020 |     1 |      10 | 5      | O        |              15 |
|      1 | 1/1/2020 |     1 |      10 | 4      | R        |              10 |
|      1 | 1/1/2020 |     2 |      20 | 5      | O        |              25 |
|      1 | 1/1/2020 |     2 |      20 | 4      | R        |              20 |
|      1 | 1/1/2020 |     3 |      30 | 5      | O        |              35 |
|      1 | 1/1/2020 |     3 |      30 | 4      | R        |              30 |
|      1 | 2/1/2020 |     1 |      40 | 5      | O        |              45 |
|      1 | 2/1/2020 |     1 |      40 | 4      | R        |              40 |
|      1 | 2/1/2020 |     2 |      50 | 5      | O        |              55 |
|      1 | 2/1/2020 |     2 |      50 | 4      | R        |              50 |
|      1 | 2/1/2020 |     3 |      60 | 5      | O        |              65 |
|      1 | 2/1/2020 |     3 |      60 | 4      | R        |              60 |
|      2 | 1/1/2020 |     7 |     100 | NaN    | O        |             100 |
|      2 | 1/1/2020 |     7 |     100 | NaN    | R        |             100 |
+--------+----------+-------+---------+--------+----------+-----------------+

Кроме того, я знаю, что это не идеал DataFrame и идеальный подход, вероятно, будет иметь два кадра данных. Как я могу установить его так, чтобы у меня был второй фрейм данных, похожий на приведенный ниже: и при этом можно было бы иметь столбец требуемый_выход, как указано выше (без дополнительной строки, поскольку типа cc больше не будет)

+--------+----------+------------+----------+
| MainID |   Date   | Acc Amount | Acc Type |
+--------+----------+------------+----------+
|      1 | 1/1/2020 | 5          | O        |
|      1 | 1/1/2020 | 4          | R        |
|      1 | 2/1/2020 | 5          | O        |
|      1 | 2/1/2020 | 4          | R        |
|      2 | 1/1/2020 | NaN        | O        |
|      2 | 1/1/2020 | NaN        | R        |
+--------+----------+------------+----------+

Спасибо!

1 Ответ

2 голосов
/ 17 марта 2020

У вас датафрейм просто отлично. Вот что я бы сделал:

df['desired_outcome'] = np.where(df['Acc Type']=='O', 
                                 df['Balance'] + df['Amount'].fillna(0),
                                 df['Balance'])

Вывод:

    MainID      Date  SubID  Balance  Amount Acc Type  desired_outcome
0        1  1/1/2020      1       10     5.0        O             15.0
1        1  1/1/2020      1       10     4.0        R             10.0
2        1  1/1/2020      2       20     5.0        O             25.0
3        1  1/1/2020      2       20     4.0        R             20.0
4        1  1/1/2020      3       30     5.0        O             35.0
5        1  1/1/2020      3       30     4.0        R             30.0
6        1  2/1/2020      1       40     5.0        O             45.0
7        1  2/1/2020      1       40     4.0        R             40.0
8        1  2/1/2020      2       50     5.0        O             55.0
9        1  2/1/2020      2       50     4.0        R             50.0
10       1  2/1/2020      3       60     5.0        O             65.0
11       1  2/1/2020      3       60     4.0        R             60.0
12       2  1/1/2020      7      100     NaN        O            100.0
13       2  1/1/2020      7      100     NaN        R            100.0
...