Python pandas reindex`method`kwag不适用于列吗?
我正在尝试这个简单的操作:Python pandas reindex`method`kwag不适用于列吗?,python,pandas,Python,Pandas,我正在尝试这个简单的操作: df = pd.DataFrame(np.random.rand(5,3)) df.columns = df.columns * 3 print(df.reindex(columns=np.arange(9), method='ffill').head()) 我明白了: 0 1 2 3 4 5 6 7 8 0 0.593936 NaN NaN 0.805081 NaN NaN 0.93
df = pd.DataFrame(np.random.rand(5,3))
df.columns = df.columns * 3
print(df.reindex(columns=np.arange(9), method='ffill').head())
我明白了:
0 1 2 3 4 5 6 7 8
0 0.593936 NaN NaN 0.805081 NaN NaN 0.930780 NaN NaN
1 0.019330 NaN NaN 0.095645 NaN NaN 0.667744 NaN NaN
2 0.826164 NaN NaN 0.295915 NaN NaN 0.259967 NaN NaN
3 0.495695 NaN NaN 0.403194 NaN NaN 0.122684 NaN NaN
4 0.365294 NaN NaN 0.648194 NaN NaN 0.621820 NaN NaN
但是,我当然希望看到:
0 1 2 3 4 5 6 7 8
0 0.593936 0.593936 0.593936 0.805081 0.805081 0.805081 0.930780 0.930780 0.930780
1 0.019330 0.019330 0.019330 0.095645 0.095645 0.095645 0.667744 0.667744 0.667744
2 0.826164 0.826164 0.826164 0.295915 0.295915 0.295915 0.259967 0.259967 0.259967
3 0.495695 0.495695 0.495695 0.403194 0.403194 0.403194 0.122684 0.122684 0.122684
4 0.365294 0.365294 0.365294 0.648194 0.648194 0.648194 0.621820 0.621820 0.621820
我可以通过一系列的
.fillna
和切片来实现我的目标,但是还有更优雅的吗?(注意,我使用的是pandas 0.18.1)从这个三列数据框开始
df
# 0 3 6
#0 0.563483 0.404885 0.336098
#1 0.097173 0.141343 0.564055
#2 0.715131 0.185852 0.361714
#3 0.841248 0.028190 0.754315
#4 0.475066 0.592953 0.839101
要展开列并沿行向前填充,可以先reindex
列,然后ffill()
使用axis=1
指定沿行的填充方向:
df.reindex(columns=np.arange(15)).ffill(axis = 1)
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
#0 0.563483 0.563483 0.563483 0.404885 0.404885 0.404885 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098
#1 0.097173 0.097173 0.097173 0.141343 0.141343 0.141343 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055
#2 0.715131 0.715131 0.715131 0.185852 0.185852 0.185852 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714
#3 0.841248 0.841248 0.841248 0.028190 0.028190 0.028190 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315
#4 0.475066 0.475066 0.475066 0.592953 0.592953 0.592953 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101
从这个三列数据框开始
df
# 0 3 6
#0 0.563483 0.404885 0.336098
#1 0.097173 0.141343 0.564055
#2 0.715131 0.185852 0.361714
#3 0.841248 0.028190 0.754315
#4 0.475066 0.592953 0.839101
要展开列并沿行向前填充,可以先reindex
列,然后ffill()
使用axis=1
指定沿行的填充方向:
df.reindex(columns=np.arange(15)).ffill(axis = 1)
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
#0 0.563483 0.563483 0.563483 0.404885 0.404885 0.404885 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098 0.336098
#1 0.097173 0.097173 0.097173 0.141343 0.141343 0.141343 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055 0.564055
#2 0.715131 0.715131 0.715131 0.185852 0.185852 0.185852 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714 0.361714
#3 0.841248 0.841248 0.841248 0.028190 0.028190 0.028190 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315 0.754315
#4 0.475066 0.475066 0.475066 0.592953 0.592953 0.592953 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101 0.839101
我想你的意思是
df.reindex(columns=np.arange(15)).ffill(axis=1)
?必须明确指定轴,否则它将沿着列ffill
。谢谢。不知道ffill
是一个单独的DataFrame
方法。我想你的意思是df.reindex(columns=np.arange(15)).ffill(axis=1)
?必须明确指定轴,否则它将沿着列ffill
。谢谢。不知道ffill
是一个单独的DataFrame
方法。