鑒于以下熊貓df-
| 持有賬戶 | 帳戶型別 | A欄 | B欄 |
|---|---|---|---|
| 魯珀特 06 (23938996) | 持有賬戶 | 1825973 | 1702598 |
| 魯珀特 07 (23938996) | 持有賬戶 | 1697870 | 1825973 |
| - | - | - | - |
| 卡羅琳 06 (0131465) | 持有賬戶 | 11112222 | 5435450 |
| 卡羅琳 07 (0131465) | 持有賬戶 | 7896545 | 11112222 |
我一直試圖找到一種方法來執行以下操作 -
- 第 1 步 - 對于整個
df,搜索出現在 A 列中的 B 列值的實體
(例如:B 列Caroline 07== A 列Caroline 06) - 第 2 步 - 滿足上述條件的行應將 B 列值更改為它們匹配的行的 B 列值
(例如:Caroline 7B 列值將從更改11112222為5435450
這意味著熊貓df現在看起來如下 -
| 持有賬戶 | 帳戶型別 | A欄 | B欄 |
|---|---|---|---|
| 魯珀特 06 (23938996) | 持有賬戶 | 1825973 | 1702598 |
| 魯珀特 07 (23938996) | 持有賬戶 | 1697870 | 1702598 |
| - | - | - | - |
| 卡羅琳 06 (0131465) | 持有賬戶 | 11112222 | 5435450 |
| 卡羅琳 07 (0131465) | 持有賬戶 | 7896545 | 5435450 |
實作此目的的代碼:以下代碼實作步驟 1 和 2 -
import numpy as np
df['Column B'] = np.where(df['Column B'].isin(df['Column A'].values),df['Column B'].shift(),df['Column B'])
我需要幫助的地方:我想擴展代碼,包括以下內容:
- 第 3 步 - 一旦第 2 步完成,洗掉其 A 列值與另一行的 B 列匹配的行
(例如:Rupert 06 (23938996)并且Caroline 06 (0131465)將被洗掉,因為它們從Rupert 07 (23938996)和接收 B 列值Caroline 07 (0131465)。
| 持有賬戶 | 帳戶型別 | A欄 | B欄 |
|---|---|---|---|
| 魯珀特 07 (23938996) | 持有賬戶 | 1697870 | 1702598 |
| 卡羅琳 07 (0131465) | 持有賬戶 | 7896545 | 5435450 |
有誰知道我可以如何適當地擴展代碼?
uj5u.com熱心網友回復:
而不是使用np.where,只需計算一些掩碼:
rows_to_remove = df['Column A'].isin(df['Column B'])
df.loc[df['Column B'].isin(df['Column A'].values), 'Column B'] = df.loc[rows_to_remove, 'Column B'].to_numpy()
df = df[~rows_to_remove]
輸出:
>>> df
Holding Account Account Type Column A Column B
1 Rupert 07 (23938996) Holding Account 1697870 1702598
3 Caroline 07 (0131465) Holding Account 7896545 5435450
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447968.html
