根据数据帧,计算连续行之间的差异

2024-09-30 08:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

使用pandas,我在循环中打开一些csv文件,并将索引设置为cycleID列,但cycleID列不是唯一的。见下文:

for filename in all_files:
    abfdata = pd.read_csv(filename, index_col=None, header=0)
    abfdata = abfdata.set_index("cycleID", drop=False)

for index, row in abfdata.iterrows():
    print(row['cycleID'], row['mean'])

这将打印我感兴趣的数据帧的2列(cycleIDmean),以便进一步计算:

1 1.5020712104685252e-11
1 6.56683605063102e-12
2 1.3993315187144084e-11
2 -8.670502467042485e-13
3 7.0270625256163566e-12
3 9.509995221868016e-12
4 1.2901435995915644e-11
4 9.513106448422182e-12

目标是使用对应于相同cycleID的行,并计算mean列值之间的差异。因此,如果表中有8行,那么最终的数组或列表将存储4个值

我还想使它具有可伸缩性,其中可以有3行或更多行具有相同的cycleID。在这种情况下,每个cycleID可以有2个或更多的mean差异


更新:我想在这里添加一个问题,而不是创建一个新的问题。 我使用了解决方案中提到的diff和groupby方法。它工作得很好,但我需要在一个新列中保存一个平均值(奇数行或偶数行无关紧要),并将其作为新数据帧的一部分。我该怎么做


Tags: 文件csv数据inpandasforindex差异
1条回答
网友
1楼 · 发布于 2024-09-30 08:17:22

您可以使用groupby

s2= df.groupby(['cycleID'])['mean'].diff()
s2.dropna(inplace=True)

输出

1   -8.453876e-12
3   -1.486037e-11
5   2.482933e-12
7   -3.388330e-12
8   3.000000e-12

更新

d = [[1, 1.5020712104685252e-11],
[1, 6.56683605063102e-12],
[2, 1.3993315187144084e-11],
[2, -8.670502467042485e-13],
[3, 7.0270625256163566e-12],
[3, 9.509995221868016e-12],
[4, 1.2901435995915644e-11],
[4, 9.513106448422182e-12]]

df = pd.DataFrame(d, columns=['cycleID', 'mean'])



df2 = df.groupby(['cycleID']).diff().dropna().rename(columns={'mean': 'difference'})
df2['mean'] = df['mean'].iloc[df2.index]
       difference    mean
1   -8.453876e-12   6.566836e-12
3   -1.486037e-11   -8.670502e-13
5   2.482933e-12    9.509995e-12
7   -3.388330e-12   9.513106e-12

相关问题 更多 >

    热门问题