案例背景
需求是這個樣的:
?把這個表格進行拓展。
代碼實現:
df = pd.DataFrame(np.array([[1, 2, 3,4], ['a','b', 'c','d'], ['小明','小紅', '小馬','小天']]))
df
?方法一:自定義函數:
def expand_dataframe(df):m, n = df.shapenew_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_dfexpand_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)
?然后這這個數組套上索引和行名稱就行。