按特定列对记录进行分组,并插入缺失的值

2024-09-28 03:25:10 发布

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

我有以下数据帧:

col1 col2                   col3        col4 
A    2021-03-28 01:40:00    1.381158    0.0
A    2021-03-28 01:50:00    0.480089    0.0
A    2021-03-28 03:00:00    0.111088    0.0
A    2021-03-28 03:10:00    0.000000    0.0
A    2021-03-28 03:20:00    0.000000    0.0
A    2021-03-28 03:40:00    0.151066    0.0
B    2021-03-28 03:00:00    1.231341    1.0
B    2021-03-28 03:20:00    1.334457    0.0
B    2021-03-28 03:30:00    1.123412    0.0

记录之间的间隔应为10分钟,但实际上有些记录丢失,例如,对于A,在01:50:0003:00:00之间以及对于B03:00:0003:20:00之间存在信号跳变

我需要插值col3的缺失值,按col1分组,并使用线性插值。我试图根据我的需要来拟合^ {CD9}},但我不清楚如何用^ {CD8}}来考虑分组。


Tags: 数据间隔信号记录col2col3col1插值
1条回答
网友
1楼 · 发布于 2024-09-28 03:25:10

这将使您到达可以对列进行插值的点

data = '''col1  col2                   col3        col4 
A    2021-03-28 01:40:00    1.381158    0.0
A    2021-03-28 01:50:00    0.480089    0.0
A    2021-03-28 03:00:00    0.111088    0.0
A    2021-03-28 03:10:00    0.000000    0.0
A    2021-03-28 03:20:00    0.000000    0.0
A    2021-03-28 03:40:00    0.151066    0.0
B    2021-03-28 03:00:00    1.231341    1.0
B    2021-03-28 03:20:00    1.334457    0.0
B    2021-03-28 03:30:00    1.123412    0.0'''
df = pd.read_csv(io.StringIO(data), sep=' \s+', engine='python')
df['col2'] = pd.to_datetime(df['col2'])
df.set_index('col2', inplace=True)
df = df.groupby('col1', as_index=False).resample('10min').last()
df['col1'].ffill(inplace=True)
df = df.reset_index().drop('level_0', axis=1).set_index('col1')

def interpolate_group(x):
    x['col3'] = x['col3'].interpolate(method='linear')  
    return x
    
df = df.groupby(df.index, as_index=False).apply(interpolate_group)
df.reset_index(inplace=True)
df

输出

   col1                col2  col3  col4
0     A 2021-03-28 01:40:00 1.381 0.000
1     A 2021-03-28 01:50:00 0.480 0.000
2     A 2021-03-28 02:00:00 0.427   NaN
3     A 2021-03-28 02:10:00 0.375   NaN
4     A 2021-03-28 02:20:00 0.322   NaN
5     A 2021-03-28 02:30:00 0.269   NaN
6     A 2021-03-28 02:40:00 0.217   NaN
7     A 2021-03-28 02:50:00 0.164   NaN
8     A 2021-03-28 03:00:00 0.111 0.000
9     A 2021-03-28 03:10:00 0.000 0.000
10    A 2021-03-28 03:20:00 0.000 0.000
11    A 2021-03-28 03:30:00 0.076   NaN
12    A 2021-03-28 03:40:00 0.151 0.000
13    B 2021-03-28 03:00:00 1.231 1.000
14    B 2021-03-28 03:10:00 1.283   NaN
15    B 2021-03-28 03:20:00 1.334 0.000
16    B 2021-03-28 03:30:00 1.123 0.000

相关问题 更多 >

    热门问题