案例背景
需求是这个样的:
把这个表格进行拓展。
代码实现:
df = pd.DataFrame(np.array([[1, 2, 3,4], ['a','b', 'c','d'], ['小明','小红', '小马','小天']]))
df
方法一:自定义函数:
def expand_dataframe(df):
m, n = df.shape
new_df = pd.DataFrame(np.full((m, m*n), np.nan))
for i in range(m):
new_df.iloc[i, i*n:(i+1)*n] = df.iloc[i, :].to_numpy()
return new_df
expand_dataframe(df).fillna('')
方法二:链式法则
pd.concat([df.loc[i].to_frame().T for i in range(df.shape[0])],axis=1)\
.set_axis(range(df.shape[0]*df.shape[1]),axis='columns').fillna('')
反向缩回表格对齐
说白了就是上面的需求反过来怎么完成。
df1=expand_dataframe(df).fillna('')
df1.melt()[['value']].replace('', np.nan).dropna().reset_index(drop=True) #.to_numpy().reshape(3,-1)
若一行只有一个值需要的话就以及结束了,但是这是一行4个值,所以得reshape一下吧
df1.melt()[['value']].replace('', np.nan).dropna().reset_index(drop=True) .to_numpy().reshape(3,-1)
然后这这个数组套上索引和行名称就行。