我有两个列数据帧(时间,深度)。我希望在时间列中查询等于-999999.000的值,然后在每次出现此值时拆分列,并将此行下方的数据移动到新的df。我有一个笨重的灵魂:
time depth
3.60061646 0.893399119
2.60061646 0.893977463
1.60061646 0.894550025
0.600616455 0.895119905
0.00000000 0.895459890
-999999.000 -999999.000
3.60061646 0.893399119
2.60061646 0.893977463
1.60061646 0.894550025
0.600616455 0.895119905
0.00000000 0.895459890
-999999.000 -999999.000
3.60061646 0.893399119
2.60061646 0.893977463
1.60061646 0.894550025
0.600616455 0.895119905
0.00000000 0.895459890
-999999.000 -999999.000
df_curve.loc[df_curve['time'] == -999999.000]
df1 = df_curve.iloc[:6]
df2 = df_curve.iloc[7:12]
df3 = df_curve.iloc[13:18]
有更优雅的方法吗?实际上我的数据集要大得多。
答案 0 :(得分:0)
这与您拥有的相近,但稍微更加自动化。
idx = df['time'][df['time'] == -999999].index[0]
df1 = df.iloc[:idx+1]
df2 = df.iloc[idx+1:]
如果需要多次出现值,请使用字典:
idx = [0] + list(df['time'][df['time'] == -999999].index) + [df.index[-1]+1]
dfs = {k: df.iloc[i:j] for k, (i, j) in enumerate(zip(idx, idx[1:]), 1)}