0
由於my previous question的延伸,我想採取類似下面的一個數據幀,並找到正確的行,從該從C
列提取數據,並將其放置到基於以下標準列D
:根據計算值從Pandas DataFrame中的行中查找數據?
B_new = 2*A_old -B_old
即,新行需要有一個B
等於舊行的以下結果:2*A - B
。- 其中
A
是相同的,即。新行中的A
應該與舊行具有相同的值。 - 沒有發現任何值應使用
NaN
結果
代碼:
import pandas as pd
a = [2,2,2,3,3,3,3]
b = [1,2,3,1,3,4,5]
c = [0,1,2,3,4,5,6]
df = pd.DataFrame({'A': a , 'B': b, 'C':c})
print(df)
A B C
0 2 1 0
1 2 2 1
2 2 3 2
3 3 1 3
4 3 3 4
5 3 4 5
6 3 5 6
所需的輸出:
A B C D
0 2 1 0 2.0
1 2 2 1 1.0
2 2 3 2 0.0
3 3 1 3 6.0
4 3 3 4 4.0
5 3 4 5 NaN
6 3 5 6 3.0
基於在my previous question的解決方案,我想出了一種使用for循環移動每個唯一值A
的方法:
for i in df.A.unique():
mapping = dict(df[df.A==i][['B', 'C']].values)
df.loc[df.A==i,'D'] = (2 * df[df.A==i]['A'] - df[df.A==i]['B']).map(mapping)
但是,這看起來很笨重,我懷疑有一個更好的方法,不使用for循環,從我以前的經驗來看,這往往是緩慢的。
問題: 什麼是在DataFrame中完成數據傳輸的最快方法?