gpt4 book ai didi

python - 如何比较具有相同索引的 2 行并根据特定条件删除一行?

转载 作者:太空宇宙 更新时间:2023-11-03 23:59:34 24 4
gpt4 key购买 nike

我有 4 个不同的 dfs 命名为:X , step25 , step26 & step27

X是我的主要 df,形状为 (155854, 4),其他 3 个 df 是从 X 创建的数据框如下:

X = data.loc[:, ['ContextID', 'BacksGas_Flow_sccm', 'StepID', 'Time_ms', 'Time_Elapsed']]
step25 = pd.DataFrame(columns=['ContextID', 'BacksGas_Flow_sccm', 'StepID', 'Time_ms'])
step26 = step25.copy()
step27 = step25.copy()

for _, group in df.groupby('ContextID'):
step25 = step25.append(group[group.index.get_loc(group[group.StepID.eq(24)].index[0]):][group.StepID.eq(1)])
step26 = step26.append(group[group.index.get_loc(group[group.StepID.eq(24)].index[0]):][group.StepID.eq(2)])
step27 = step27.append(group[group.index.get_loc(group[group.StepID.eq(24)].index[0]):][group.StepID.eq(3)])

这给了我其他 3 个 df,它们的形状是:

step25 (2978, 5)
step26 (4926, 5)
step27 (11810, 5)

所有这三个 df 都有一个名为 StepID 的列, 它们的值分别是 1, 2, 3,所以,我用 25, 26, 27 替换它们,然后连接所有的 dfs X , step25 , step26 & step27如下:

step25['StepID'] = 25
step26['StepID'] = 26
step27['StepID'] = 27
united_data = pd.concat([X, step25, step26, step27], sort=True)

现在,在 united_data有些值具有相同的索引。例如:

        BacksGas_Flow_sccm ContextID  StepID  Time_Elapsed         Time_ms
104082 1.757812 7325335 3 153.238 08:49:06.900000
104082 1.757812 7325335 27 153.238 08:49:06.900000
205388 1.757812 7324656 2 145.9 07:16:31.660000
205388 1.757812 7324656 26 145.9 07:16:31.660000
105119 1.953125 7290176 1 139.695 09:30:39.170000
105119 1.953125 7290176 25 139.695 09:30:39.170000

我现在想做的是检查哪些行具有相同的索引,然后只保留具有 StepID 的行作为 25、26、27 并删除或删除那些 StepID 的行s为1、2、3,其他索引不重复的行必须保留。

因此,期望的输出将是:

       BacksGas_Flow_sccm ContextID  StepID  Time_Elapsed         Time_ms
104082 1.757812 7325335 27 153.238 08:49:06.900000
205388 1.757812 7324656 26 145.9 07:16:31.660000
105119 1.953125 7290176 25 139.695 09:30:39.170000

删除或删除行将是:

       BacksGas_Flow_sccm ContextID  StepID  Time_Elapsed         Time_ms
104082 1.757812 7325335 3 153.238 08:49:06.900000
205388 1.757812 7324656 2 145.9 07:16:31.660000
105119 1.953125 7290176 1 139.695 09:30:39.170000

最佳答案

我认为最简单的解决方案是从 concat 中删除 X:

united_data = pd.concat([step25, step26, step27], sort=True)

我相信这里应该只能使用 Series.isinIndex.duplicatedboolean indexing :

df1 = df[df['StepID'].isin([25,26,27]) & united_data.index.duplicated(keep=False)]
print (df1)
cksGas_Flow_sccm ContextID StepID Time_Elapsed Time_ms
104082 1.757812 7325335 27 153.238 08:49:06.900000
205388 1.757812 7324656 26 145.900 07:16:31.660000
105119 1.953125 7290176 25 139.695 09:30:39.170000

关于python - 如何比较具有相同索引的 2 行并根据特定条件删除一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56186112/

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