gpt4 book ai didi

python - 在数据帧行之间进行比较以进行删除

转载 作者:行者123 更新时间:2023-12-01 12:04:45 24 4
gpt4 key购买 nike

在我的数据框中,我有一种数据类型,如下所示:

product_no    part_no    level
1 1_1 1
1 1_2 1
1 1_3 2
1 1_4 1
1 1_5 1
1 1_6 2
1 1_7 1
2 2_1 1
2 2_2 1
3 3_1 2

我想做这样的比较,如果两个连续的行的级别为“1”,那么上面的行将被删除。为了更好地理解,在我打算进行的转换之后,输出应该如下所示:

product_no    part_no    level
1 1_2 1
1 1_3 2
1 1_5 1
1 1_6 2
2 2_2 1
3 3_1 2

我已经通过遍历所有行实现了输出,这在时间上变得非常痛苦,因为数据框有太多的行。也欢迎通过任何其他方法进行任何变通,我非常愿意寻求帮助和解决方案。

最佳答案

编辑:在@ALollz 回答后,它让我想起了 pandas .shift() 函数,所以你可以从你的 DataFrame 中完成这一切。如果您考虑使用列而不是行,Pandas 的工作速度会更快。

## Create Dummy data and dataframe
level=[1, 1, 2, 1, 1, 1, 2]
part_no=['1_1', '1_2', '1_3', '2_1', "2_2","2_3", "3_1"]
product_no=[1, 1, 1, 2, 2, 2, 3]

df = pd.DataFrame([product_no, part_no, level]).transpose()
df.columns = ['product_no', 'part_no', 'level']

最后是去除重复的代码

# Essencially you'll create 2 columns, a shift of level
# and a compare between this new column and level
df['level2']= df['level'].shift(-1)
df['level3'] = df['level'] == df['level2']
# Than you filter by the oposite as marked as duplicates
## in conjunction of the level values being 1
df= df[~((df.level3)&(df.level==1))]
# then drop the temp columns
df.drop(['level2','level3'], axis=1, inplace=True)

关于python - 在数据帧行之间进行比较以进行删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com