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