熊猫-合并多个时间列并填充值

时间:2020-02-03 12:19:00

标签: python pandas

我有一个数据框(df):

index    time    val1    time2    val2
0        0.2     1       0.1      2
1        0.3     3       0.4      2
2        0.4     1       0.8      9
3                        1.0      2

我需要合并time列,对其进行排序,然后以“向下”的方式填充缺少的值。 预期的输出是这样的:

index    time    val1    val2
0        0.1     -       2
1        0.2     1       2
2        0.3     3       2
3        0.4     1       2
4        0.8     1       9
5        1.0     1       2

2 个答案:

答案 0 :(得分:3)

使用wide_to_long进行一些预处理-rename时间列并将索引转换为列,然后按DataFrame.sort_values进行排序,按DataFrame.drop_duplicates除去重复项,并按{{3 }}:

df1 = (pd.wide_to_long(df.rename(columns={'time':'time1'}).reset_index(),
                      'time', i='index', j='t')
        .sort_values(['time','val2'])
        .drop_duplicates('time')
        .dropna(subset=['time'])
        .reset_index(drop=True))
print (df1)
   val1  val2  time
0   1.0     2   0.1
1   1.0     2   0.2
2   3.0     2   0.3
3   3.0     2   0.4
4   1.0     9   0.8
5   NaN     2   1.0

答案 1 :(得分:3)

从主数据帧df创建2个数据帧,如下所示: 我认为索引不是列

df1= df.iloc[:,[0,1,3]]
df2= df.iloc[:,[2,1,3]]
df2=df2.rename(columns={'time2':'time'})

然后合并两个数据帧

df3=pd.concat([df1,df2], ignore_index=True)

按照时间值排序。

df4=df3.sort_values("time").drop_duplicates('time').reset_index(drop=True)