您可以使用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