pandas数据分析38——数据框表格拓展以及缩回对齐

案例背景

需求是这个样的:

pandas数据分析38——数据框表格拓展以及缩回对齐_第1张图片

 把这个表格进行拓展。


代码实现:

df = pd.DataFrame(np.array([[1, 2, 3,4], ['a','b', 'c','d'], ['小明','小红', '小马','小天']]))
df

pandas数据分析38——数据框表格拓展以及缩回对齐_第2张图片

 方法一:自定义函数:

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('')

pandas数据分析38——数据框表格拓展以及缩回对齐_第3张图片

 方法二:链式法则

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('')

pandas数据分析38——数据框表格拓展以及缩回对齐_第4张图片

 


反向缩回表格对齐

说白了就是上面的需求反过来怎么完成。

df1=expand_dataframe(df).fillna('')
df1.melt()[['value']].replace('', np.nan).dropna().reset_index(drop=True) #.to_numpy().reshape(3,-1)

pandas数据分析38——数据框表格拓展以及缩回对齐_第5张图片

 若一行只有一个值需要的话就以及结束了,但是这是一行4个值,所以得reshape一下吧

df1.melt()[['value']].replace('', np.nan).dropna().reset_index(drop=True) .to_numpy().reshape(3,-1)

 然后这这个数组套上索引和行名称就行。

你可能感兴趣的:(pandas数据分析,pandas,数据分析,数据挖掘,python)