python 如何拆分 Dataframe 的列

9udxz4iz  于 2023-01-19  发布在  Python
关注(0)|答案(3)|浏览(230)

我想把一个 Dataframe 的列拆分如下。这是主 Dataframe 。

import pandas as pd

df_az = pd.DataFrame(list(zip(storage_AZ)),columns =['AZ Combination'])
df_az

然后,我应用这段代码来拆分列。

out_az = (df_az.stack().apply(pd.Series).rename(columns=lambda x: f'a combination').unstack().swaplevel(0,1,axis=1).sort_index(axis=1))
out_az = pd.concat([out_az], axis=1)
out_az.head()

然而,结果如下。

同时,预期结果为:

有谁能帮我修改一下代码吗?谢谢。

ruarlubt

ruarlubt1#

下面是一个示例,说明如何使用str.split()方法拆分DataFrame的“AZ Combination”列:

df_az["AZ Combination"].str.split("-", expand=True)

这将按“-”字符拆分“AZ组合”列,并为拆分的每个部分创建新列。expand=True参数告诉该方法为拆分值创建新列,而不是返回Series。
还可以将新列分配给新DataFrame:

df_split = df_az["AZ Combination"].str.split("-", expand=True)

也可以按如下方式为新列指定新列名:

df_split.columns = ['Part1', 'Part2']

您还可以将新 Dataframe 与原始 Dataframe 合并,如下所示:

df_az = pd.concat([df_az,df_split], axis=1)

需要注意的是,这将按“-"分割列,如果分隔符不同,请相应地调整代码。此外,如果字符串的部分数量可变,您可能需要相应地调整列数。

vfh0ocws

vfh0ocws2#

您可以应用np.ravel

>>> pd.DataFrame.from_records(df_az['AZ Combination'].apply(np.ravel))

   0  1  2  3  4  5
0  0  0  0  0  0  0
1  0  0  0  0  0  1
j9per5c4

j9per5c43#

将列转换为列表,并将reshape转换为2d array,因此可以使用Dataframe构造函数。
然后设置列名,为避免列名重复则添加计数器:

storage_AZ = [[[0,0,0],[0,0,0]],
              [[0,0,0],[0,0,1]],
              [[0,0,0],[0,1,0]],
              [[0,0,0],[1,0,0]],
              [[0,0,0],[1,0,1]]]
df_az = pd.DataFrame(list(zip(storage_AZ)),columns =['AZ Combination'])
    

N = 3
L = ['a combination','z combination']
df = pd.DataFrame(np.array(df_az['AZ Combination'].tolist()).reshape(df_az.shape[0],-1))
df.columns = [f'{L[a]}_{b}' for a, b in zip(df.columns // N, df.columns % N)]
print(df)
   a combination_0  a combination_1  a combination_2  z combination_0  \
0                0                0                0                0   
1                0                0                0                0   
2                0                0                0                0   
3                0                0                0                1   
4                0                0                0                1   

   z combination_1  z combination_2  
0                0                0  
1                0                1  
2                1                0  
3                0                0  
4                0                1

如果需要MultiIndex

df = pd.concat({'AZ Combination':df}, axis=1)
print(df)
   AZ Combination                                                  \
  a combination_0 a combination_1 a combination_2 z combination_0   
0               0               0               0               0   
1               0               0               0               0   
2               0               0               0               0   
3               0               0               0               1   
4               0               0               0               1   

                                   
  z combination_1 z combination_2  
0               0               0  
1               0               1  
2               1               0  
3               0               0  
4               0               1

相关问题