Python交叉或切换公式
我想要一个公式或任何类似“开关”的东西。如果列“位置”变为3或以上,则开关接通(=1)。如果“位置”超过5,则开关关闭(=0)。如果位置低于3,开关也将关闭(=0)。我已经包括了“所需”专栏,以显示我希望这个新专栏能够自动完成的内容Python交叉或切换公式,python,switch-statement,Python,Switch Statement,我想要一个公式或任何类似“开关”的东西。如果列“位置”变为3或以上,则开关接通(=1)。如果“位置”超过5,则开关关闭(=0)。如果位置低于3,开关也将关闭(=0)。我已经包括了“所需”专栏,以显示我希望这个新专栏能够自动完成的内容 df = pd.DataFrame() df['position'] = [1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,2,3,4,5,4,3,2,1] df['desired'] = [0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,
df = pd.DataFrame()
df['position'] = [1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,2,3,4,5,4,3,2,1]
df['desired'] = [0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0]
我将使用.shift()
创建带有移位位置的行,以便在一行中具有当前值和提供值。然后我可以检查它是否高于3、5或低于3,并更改将在列“所需的”
中指定的值
创建列“所需”后,我必须删除移位的数据
import pandas as pd
df = pd.DataFrame()
df['position'] = [1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,2,3,4,5,4,3,2,1]
#df['desired'] = [0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0]
df['previous'] = df['position'].shift()
# ---
value = 0
def change(row):
global value
#print(row)
if (row['previous'] < 3) and (row['position'] >= 3):
value = 1
if (row['previous'] >= 3) and (row['position'] < 3):
value = 0
if (row['previous'] <= 5) and (row['position'] > 5):
value = 0
return value
# ---
#for ind, row in df.iterrows():
# print(int(row['position']), change(row))
df['desired'] = df.apply(change, axis=1)
df.drop('previous', axis=1)
print(df)
df['position'].map(lambda x:3在6,5,4,3,2
中5,4,3
的情况下-不应该是1
?您有0
@furas,似乎开关的状态仅在所述触发点发生变化。您描述这一点时,似乎希望它涉及到之前的计算结果,但它似乎并不是真的-y你不关心位置值“将”到某个范围,而只关心当前值是否在该范围内。是吗?@jornsharpe我认为你应该写下来作为答案;我不明白为什么解决方案需要比这更复杂。
position desired
0 1 0
1 2 0
2 3 1
3 4 1
4 5 1
5 6 0
6 7 0
7 8 0
8 7 0
9 6 0
10 5 0
11 4 0
12 3 0
13 2 0
14 1 0
15 2 0
16 3 1
17 4 1
18 5 1
19 4 1
20 3 1
21 2 0
22 1 0