您可以使用DataFrame
构造与reindex_axis
和numpy.arange
:
df = pd.DataFrame({'time':np.arange(df['time'].max() + 1)[::-1]})
.reindex_axis(df.columns, axis=1)
print (df)
a b time
0 NaN NaN 8
1 NaN NaN 7
2 NaN NaN 6
3 NaN NaN 5
4 NaN NaN 4
5 NaN NaN 3
6 NaN NaN 2
7 NaN NaN 1
8 NaN NaN 0
如果在原来的DF使用价值set_index
+ reindex
+ reset_index
+ reindex_axis
:
print (df)
a b time
0 4 5 8
1 2 8 5
2 1 2 3
df = df.set_index('time')
.reindex(np.arange(df['time'].max() + 1)[::-1])
.reset_index()
.reindex_axis(df.columns, axis=1)
print (df)
a b time
0 4.0 5.0 8
1 NaN NaN 7
2 NaN NaN 6
3 2.0 8.0 5
4 NaN NaN 4
5 1.0 2.0 3
6 NaN NaN 2
7 NaN NaN 1
8 NaN NaN 0
解决方案与重复的time
柱merge
:
print (df)
a b time
0 4 5 8
1 2 3 8
2 1 2 3
df1 = pd.DataFrame({'time':np.arange(df['time'].max() + 1)[::-1]})
df = pd.merge(df,df1, how='outer').sort_values('time', ascending=False)
print (df)
a b time
0 4.0 5.0 8
1 2.0 3.0 8
3 NaN NaN 7
4 NaN NaN 6
5 NaN NaN 5
6 NaN NaN 4
2 1.0 2.0 3
7 NaN NaN 2
8 NaN NaN 1
9 NaN NaN 0
我非常喜欢你的答案!但是你正在构建新的数据框,因此如果a或b中有一些值将被Nan取代。在这种情况下,你是否仍然使用这种代码或者你会构建其他的东西? – poppytop
如果原始数据帧中的值相同,我将添加我的第一个解决方案。谢谢。 – jezrael
对不起,让你烦恼,但我只是想通了,我有我的数据框中重复,所以reindex将无法正常工作。你有更多的建议吗?谢谢! – poppytop