我對python代碼真的很陌生,并且在為我自己的案例應用類似問題的一些答案時遇到了麻煩。請幫忙
所以我有一個 A 列和 B 列的資料框,有很多行
兩者都包含負數和正數,我正在嘗試使用以下條件創建一個新的 C 列
如果“第 1 行的值,A 列小于 0”和“第 1 行的值,B 列小于 0”,則在“第 1 行,C 列”中回傳 -100
Elif “第 1 行的值,A 列小于 0”&“第 1 行的值,B 列大于 0”,在“第 1 行,C 列”回傳 100
Elif“第1行的值,A列大于0”&“第1行的值,B列小于0”,在“第1行,C列”回傳100
否則:在 C 列中回傳(A.Value 列 / B.Value 列)
非常感謝
uj5u.com熱心網友回復:
我想你正在尋找np.select:
condlist = [(df['A'] < 0) & (df['B'] < 0),
(df['A'] < 0) & (df['B'] > 0),
(df['A'] > 0) & (df['B'] < 0)]
choicelist = [-100, 100, 100]
default = df['A'] / df['B']
df['C'] = np.select(condlist, choicelist, default)
輸出:
>>> df
A B C
0 -0.002639 -1.374507 -100.000000
1 -0.696428 9.923431 100.000000
2 1.410547 3.804043 0.370802
3 1.504908 2.701486 0.557067
4 1.867486 1.889067 0.988576
5 -0.451066 -11.529716 -100.000000
6 5.713800 -7.678271 100.000000
7 -4.318760 5.082725 100.000000
8 5.169819 -4.122461 100.000000
9 0.094524 -1.916718 100.000000
設定MRE
import pandas as pd
import numpy as np
np.random.seed(2022)
df = pd.DataFrame(np.random.normal(0, 5, (10, 2)), columns=['A', 'B'])
uj5u.com熱心網友回復:
您可以做到這一點的一種方法是定義一個具有所需邏輯的函式,然后將其apply沿軸 1(逐行)傳遞給函式。在這種情況下,該函式可能如下所示:
def f(x):
if x["A"] < 0 and x["B"] < 0:
return -100
elif x["A"] < 0 and x["B"] > 0:
return 100
elif x["A"] > 0 and x["B"] < 0:
return 100
else:
return x["A"] / x["B"]
然后我們可以生成一些樣本資料用于測驗目的:
>>> import numpy as np
>>> import pandas as pd
>>> data = np.random.randint(-50, 50, size = (10, 2))
>>> df = pd.DataFrame(data, columns = ["A", "B"])
>>> df
A B
0 23 4
1 10 25
2 -14 45
3 31 32
4 49 32
5 -23 34
6 -10 -29
7 10 -19
8 -45 -48
9 31 -31
最后,我們可以將我們的函式應用于樣本資料:
>>> df["C"] = df.apply(f, axis = 1)
>>> df
A B C
0 23 4 5.75000
1 10 25 0.40000
2 -14 45 100.00000
3 31 32 0.96875
4 49 32 1.53125
5 -23 34 100.00000
6 -10 -29 -100.00000
7 10 -19 100.00000
8 -45 -48 -100.00000
9 31 -31 100.00000
uj5u.com熱心網友回復:
import pandas as pd
# initialize as list
data = [[1, 10], [3, 45], [56, -6], [-96, -65]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['A', 'B'])
print(df)
print('*****************')
df['C'] = None
if df.iat[0,0] < 0 and df.iat[0,1] < 0:
df.iat[0,2] = -100
elif df.iat[0,0] < 0 and df.iat[0,1] > 0:
df.iat[0,2] = 100
elif df.iat[0,0] > 0 and df.iat[0,1] < 0:
df.iat[0,2] = 100
else:
df['C'] = df['A']/df['B']
print('New dataFrame:')
print(df)
輸出:
A B
0 1 10
1 3 45
2 56 -6
3 -96 -65
*****************
New dataFrame:
A B C
0 1 10 0.100000
1 3 45 0.066667
2 56 -6 -9.333333
3 -96 -65 1.476923
讓我知道是否有任何困惑!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442261.html
上一篇:如何確定套接字何時收到EOF?(C 20boostasio協程)
下一篇:在R中使用資料框制作嵌套串列
