Pandas:比较列
Pandas: Comparing columns
您好,我有一个用 pandas 制作的数据框。我需要比较两列的真值。我创建了两个新专栏:"misslast" 和 "hitlast"
"hitlast":当 "response" 列为 True 且下一行 "Confidence" 列为 True 时,其值为 TRUE。所有其他组合都应该是假的。
"misslast":当 "response" 列为 False 并且 "confidence" 列的下一行也为 False 时,它的值为 True。
他们都在比较下一轮的信心状态是否与上一轮的表现相匹配。
这是mi数据框(实际上是一个[2539行x 19列]矩阵):
circle_rt response circle_number confidence confidence_rt nose \
0 12.746130 True 0 True 26.686977 0.000000
1 5.497027 True 6 True 2.219596 0.120000
2 3.789324 True 2 True 4.992639 0.118931
3 7.716839 True 2 True 3.139458 0.067106
4 4.219006 True 7 True 2.680553 0.000000
5 6.635735 True 1 True 1.643296 0.015449
6 12.768281 False 2 True 2.045460 0.000000
7 4.293818 True 0 True 1.915654 0.060843
8 2.280957 True 5 True 2.384980 0.000000
...
32 2.073823 True 4 True 0.614546 0.000000
33 3.290734 False 7 False 1.675789 0.000000
34 9.443876 False 6 False 5.116144 0.001011
35 5.288295 True 8 True 0.642439 0.021680
36 2.007872 True 0 True 0.948012 0.000000
例如,比较"response"中第6行的真值与"confidence"中第7行的真值时,"lashit"的值应该为TRUE,因为它们是不相等。
当比较 "response" 列中的第 33 行与 "confidence" 列中的第 34 行时,我应该 return 为真。
这是代码
df['hitlast']=(df['response']&True) & df['confidence'].shift(1).fillna(0)
df['misslast']=(df["response"]&False) & ((df["confidence"]&False).shift(1).fillna(True))#Creo una columna que Indica True Si el valor de "response" es Falso y ademas "Confidence" de la siguiente jugada es False tambien.
我的新数据框添加了两列:Hitlast 和 misslast
问题是 misslast 总是错误的,我不知道为什么。
你的问题是这一行:
(df["response"]&False) & ((df["confidence"]&False).shift(1).fillna(True))
因为它将始终计算为 False
(任何 & False
将计算为 False
)
您可以简单地使用:
df['hitlast'] = df['response'] & df['confidence'].shift(-1).fillna(False)
和
df['misslast'] = ~df['response'] & ~df['confidence'].shift(-1).fillna(True)
在行动:
>>> df
circle_rt response circle_number confidence confidence_rt nose
0 12.746130 True 0 True 26.686977 0.000000
10 3.290734 False 7 False 1.675789 0.000000
11 9.443876 False 6 False 5.116144 0.001011
12 5.288295 True 8 True 0.642439 0.021680
13 2.007872 True 0 True 0.948012 0.000000
>>> df['response'] & df['confidence'].shift(-1).fillna(False)
0 False
10 False
11 False
12 True
13 False
dtype: bool
>>> ~df['response'] & ~df['confidence'].shift(-1).fillna(True)
0 False
10 True
11 False
12 False
13 False
dtype: bool
您好,我有一个用 pandas 制作的数据框。我需要比较两列的真值。我创建了两个新专栏:"misslast" 和 "hitlast" "hitlast":当 "response" 列为 True 且下一行 "Confidence" 列为 True 时,其值为 TRUE。所有其他组合都应该是假的。 "misslast":当 "response" 列为 False 并且 "confidence" 列的下一行也为 False 时,它的值为 True。 他们都在比较下一轮的信心状态是否与上一轮的表现相匹配。
这是mi数据框(实际上是一个[2539行x 19列]矩阵):
circle_rt response circle_number confidence confidence_rt nose \
0 12.746130 True 0 True 26.686977 0.000000
1 5.497027 True 6 True 2.219596 0.120000
2 3.789324 True 2 True 4.992639 0.118931
3 7.716839 True 2 True 3.139458 0.067106
4 4.219006 True 7 True 2.680553 0.000000
5 6.635735 True 1 True 1.643296 0.015449
6 12.768281 False 2 True 2.045460 0.000000
7 4.293818 True 0 True 1.915654 0.060843
8 2.280957 True 5 True 2.384980 0.000000
...
32 2.073823 True 4 True 0.614546 0.000000
33 3.290734 False 7 False 1.675789 0.000000
34 9.443876 False 6 False 5.116144 0.001011
35 5.288295 True 8 True 0.642439 0.021680
36 2.007872 True 0 True 0.948012 0.000000
例如,比较"response"中第6行的真值与"confidence"中第7行的真值时,"lashit"的值应该为TRUE,因为它们是不相等。 当比较 "response" 列中的第 33 行与 "confidence" 列中的第 34 行时,我应该 return 为真。 这是代码
df['hitlast']=(df['response']&True) & df['confidence'].shift(1).fillna(0)
df['misslast']=(df["response"]&False) & ((df["confidence"]&False).shift(1).fillna(True))#Creo una columna que Indica True Si el valor de "response" es Falso y ademas "Confidence" de la siguiente jugada es False tambien.
我的新数据框添加了两列:Hitlast 和 misslast
问题是 misslast 总是错误的,我不知道为什么。
你的问题是这一行:
(df["response"]&False) & ((df["confidence"]&False).shift(1).fillna(True))
因为它将始终计算为 False
(任何 & False
将计算为 False
)
您可以简单地使用:
df['hitlast'] = df['response'] & df['confidence'].shift(-1).fillna(False)
和
df['misslast'] = ~df['response'] & ~df['confidence'].shift(-1).fillna(True)
在行动:
>>> df
circle_rt response circle_number confidence confidence_rt nose
0 12.746130 True 0 True 26.686977 0.000000
10 3.290734 False 7 False 1.675789 0.000000
11 9.443876 False 6 False 5.116144 0.001011
12 5.288295 True 8 True 0.642439 0.021680
13 2.007872 True 0 True 0.948012 0.000000
>>> df['response'] & df['confidence'].shift(-1).fillna(False)
0 False
10 False
11 False
12 True
13 False
dtype: bool
>>> ~df['response'] & ~df['confidence'].shift(-1).fillna(True)
0 False
10 True
11 False
12 False
13 False
dtype: bool