当前位置: 首页 > 面试题库 >

比较Pandas DataFrame中的上一行值

刘英彦
2023-03-14
问题内容
import pandas as pd
data={'col1':[1,3,3,1,2,3,2,2]}
df=pd.DataFrame(data,columns=['col1'])
print df


         col1  
    0     1          
    1     3          
    2     3          
    3     1          
    4     2          
    5     3          
    6     2          
    7     2

我有以下Pandas DataFrame,我想创建另一列来比较col1的前一行,以查看它们是否相等。最好的方法是什么?就像下面的DataFrame。谢谢

    col1  match  
0     1   False     
1     3   False     
2     3   True     
3     1   False     
4     2   False     
5     3   False     
6     2   False     
7     2   True

问题答案:

您需要eq使用shift

df['match'] = df.col1.eq(df.col1.shift())
print (df)
   col1  match
0     1  False
1     3  False
2     3   True
3     1  False
4     2  False
5     3  False
6     2  False
7     2   True

或改为eq使用==,但是在大型DataFrame中,它会稍微慢一些:

df['match'] = df.col1 == df.col1.shift()
print (df)
   col1  match
0     1  False
1     3  False
2     3   True
3     1  False
4     2  False
5     3  False
6     2  False
7     2   True

时间

import pandas as pd
data={'col1':[1,3,3,1,2,3,2,2]}
df=pd.DataFrame(data,columns=['col1'])
print (df)
#[80000 rows x 1 columns]
df = pd.concat([df]*10000).reset_index(drop=True)

df['match'] = df.col1 == df.col1.shift()
df['match1'] = df.col1.eq(df.col1.shift())
print (df)

In [208]: %timeit df.col1.eq(df.col1.shift())
The slowest run took 4.83 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 933 µs per loop

In [209]: %timeit df.col1 == df.col1.shift()
1000 loops, best of 3: 1 ms per loop


 类似资料:
  • 问题内容: 我有一个名为team的表,如下所示:我只是在第三列中添加了row_number 当16出现时,则以1开头,而16依次出现,则一一加。结果就像 帮我得到结果。 问题答案: 您可以使用以下查询: 字段标识具有相同值的连续记录的切片(也称为孤岛)。外部查询用于枚举属于切片的每个记录。属于其他切片的记录被分配了值。 演示在这里

  • 问题内容: 我似乎对此SQL查询有疑问: 时间格式为军事时间。物流是可以在早上7点至下午1点或晚上9点至下午1点或晚上9点至下午5点预订船租。如果该范围内有一个appt,则应返回appts,但事实证明它不一致。如果我选择上午9点至下午1点,即使它与上午9点至下午1点重叠,它也会忽略从上午7点开始的应用。如果我选择9到5,即使应该是早上7点到下午1点,也不会返回任何内容。如何制作一个包含从timeS

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和

  • 问题内容: 我正在寻找一个Linux命令行工具来比较两个PDF文件并将差异保存到PDF输出文件中。该工具应在批处理过程中创建diff- pdf。PDF文件是施工计划,因此纯文本比较无效。 就像是: 我发现的大多数工具都将PDF转换为图像并进行比较,但只能使用GUI。 也欢迎任何其他解决方案。 问题答案: 使用(全能的)imagemagick和pdftk分两行完成: 选项-verbose和-debu

  • Java在进行比较时抛出的错误是: 然后比较的方法(比较器 你知道发生了什么事吗?

  • 具有以下类型的数据,并希望通过检查行的i-1和i-1行来重新标记其行。 我要重新标记行的条件是 在简单图片中:将上一行和下一行的值与行进行比较。如果差异是 上一行或下一行是否良好有一个特殊条件。 > 如果差异i 1标记为和行差异(值) 预期产出 检查差异值i-1和i1