簡體   English   中英

Groupby兩列並根據python中的條件減法創建一個新列

[英]Groupby two columns and create a new column based on a conditional subtraction in python

我正在嘗試基於 python 中的條件減法創建一個新列。 我想首先按 A 列和 D 列對數據幀進行分組,然后取 C 的行值,其中 B 等於 2,然后從 C 列中的所有值中減去該值。

import pandas as pd

data = [
["R", 1, 2, "p"],
["R", 2, 4, "p"],
["R", 3, 6, "p"],
["R", 4, 8, "p"],
["R", 1, 6, "o"],
["R", 2, 3, "o"],
["R", 3, 1, "o"],
["R", 4, 2, "o"],
["S", 0, 5, "n"],
["S", 1, 4, "n"],
["S", 2, 1, "n"],
["S", 3, 3, "n"],
["S", 0, 3, "g"],
["S", 1, 2, "g"],
["S", 2, 9, "g"],
["S", 3, 7, "g"]]

df = pd.DataFrame(data=data, columns=["a", "b", "c", "d"])
df

Out[1]:
    a   b   c   d
0   R   1   2   p
1   R   2   4   p
2   R   3   6   p
3   R   4   8   p
4   R   1   6   o
5   R   2   3   o
6   R   3   1   o
7   R   4   2   o
8   S   0   5   n
9   S   1   4   n
10  S   2   1   n
11  S   3   3   n
12  S   0   3   g
13  S   1   2   g
14  S   2   9   g
15  S   3   7   g

希望它產生列'e':

Out[2]:
    a   b   c   d   e 
0   R   1   2   p  -2
1   R   2   4   p   0 
2   R   3   6   p   2
3   R   4   8   p   4
4   R   1   6   o   3
5   R   2   3   o   0
6   R   3   1   o  -2
7   R   4   2   o  -1
8   S   0   5   n   4
9   S   1   4   n   3
10  S   2   1   n   0
11  S   3   3   n   2
12  S   0   3   g  -6
13  S   1   2   g  -7
14  S   2   9   g   0
15  S   3   7   g  -2

我將不勝感激有關如何使用轉換或映射函數來解決問題的任何提示。

IIUC,您可以在使用groupby.transform('first')之前使用掩碼:

df['e'] = df['c'] - (df['c'].where(df['b'].eq(2))
                            .groupby([df['a'], df['d']])
                            .transform('first')
                            .convert_dtypes()
                    )

輸出:

    a  b  c  d   e
0   R  1  2  p  -2
1   R  2  4  p   0
2   R  3  6  p   2
3   R  4  8  p   4
4   R  1  6  o   3
5   R  2  3  o   0
6   R  3  1  o  -2
7   R  4  2  o  -1
8   S  0  5  n   4
9   S  1  4  n   3
10  S  2  1  n   0
11  S  3  3  n   2
12  S  0  3  g  -6
13  S  1  2  g  -7
14  S  2  9  g   0
15  S  3  7  g  -2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM