我试图使用Pandas DataFrame开发以下过滤器:
下面是一个有效但效率不高的示例:
- 我有四列,
A
、B
、A_prime
和B_prime
; - 如果A或B小于阈值
C
,则我想找到A_prime
和B_prime
之间的总和,并分配给A_prime
和B_prime
中的最大值,同时将A_prime
和B_prime
中的最小值设置为零。
下面是一个有效但效率不高的示例:
import pandas as pd
import numpy as np
data = {
"A":list(np.abs(np.random.randn(10))),
"B":list(np.abs(np.random.randn(10))),
"A_prime":list(np.abs(np.random.randn(10))),
"B_prime":list(np.abs(np.random.randn(10)))
}
df = pd.DataFrame.from_dict(data)
C = 0.2
print("BEFORE:")
print(df)
for index, row in df.iterrows():
if(row["A"] < C or row["B"] < C):
max_idx = np.argmax([row["A"], row["B"]])
if(max_idx==0):
row["A_prime"] = row["A_prime"] + row["B_prime"]
row["B_prime"] = 0
else:
row["B_prime"] = row["A_prime"] + row["B_prime"]
row["A_prime"] = 0
print("")
print("AFTER:")
print(df)
输出:
BEFORE:
A B A_prime B_prime
0 0.182445 0.924890 1.563398 0.562325
1 0.252587 0.273637 0.515395 0.538876
2 1.369412 1.985702 1.813962 1.643794
3 0.834666 0.143880 0.860673 0.372468
4 1.380012 0.715774 0.022681 0.892717
5 0.582497 0.477100 0.956821 1.134613
6 0.083045 0.322060 0.362513 1.386124
7 1.384267 0.251577 0.639843 0.458650
8 0.375456 0.412320 0.661661 0.086588
9 0.079226 0.385621 0.601451 0.837827
AFTER:
A B A_prime B_prime
0 0.182445 0.924890 0.000000 2.125723
1 0.252587 0.273637 0.515395 0.538876
2 1.369412 1.985702 1.813962 1.643794
3 0.834666 0.143880 1.233141 0.000000
4 1.380012 0.715774 0.022681 0.892717
5 0.582497 0.477100 0.956821 1.134613
6 0.083045 0.322060 0.000000 1.748638
7 1.384267 0.251577 0.639843 0.458650
8 0.375456 0.412320 0.661661 0.086588
9 0.079226 0.385621 0.000000 1.439278
A
和B
上而不是质数上,以确定要将总和放在哪个*_prime
中。 - Mustafa Aydın