我有一个数据框(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
答案 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)