嗨我有一个用熊猫制作的数据框。我需要比较两列真值的价值。我做了两个新专栏:" misslast"和" hitlast" " hitlast":当列#34;响应"时,它的值为TRUE值得为真,下一行形成de column" Confidence"是值得的。所有其他组合都应该是假的。 " misslast":当列#34;响应"为False和列中的下一行"置信度"也是假的。 如果下一轮的信心状态与上一轮的表现相符,他们都在比较。
这是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
例如,比较"响应"中第6行的真值。 "置信度"中的第7行," lashit"应该是正确的,因为他们不平等。 当比较第34行"响应"第34列第34行"置信度"我应该返回True。 这是代码
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总是假的,我不知道为什么。
答案 0 :(得分:0)
您的问题是这一行:
(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