如何根据该列中的唯一值创建分层列

问题描述 投票:0回答:2

我有一个大熊猫数据框,如下所示:

S.No Name1 Name2 Size

1 ABC XYZ 12

2 BCA XCZ 15

3 DAB ZXM 20

如何为Name1列中的所有唯一值创建分层列,后跟名称2中具有所有唯一值的列,这将使数据框如下所示:

ABC BCA DAB

S.NO XYZ XCZ ZXM XYZ XCZ ZXM XYZ XCZ ZXM

1 12 N / A N / A

2 N / A 15 N / A.

3 N / A N / A 20

python pandas dataframe
2个回答
0
投票

考虑在辅助数据框上使用merge填充空行,该数据框是使用itertools.product从值的唯一笛卡尔积(S.No,Name1,Name2的所有可能组合)创建的:

from io import StringIO
from itertools import product
import pandas as pd

txt = '''S.No    Name1     Name2     Size    
1           ABC         XYZ         12    
2           BCA         XCZ         15    
3           DAB         ZXM         20'''

df = pd.read_table(StringIO(txt), sep="\s+")

fill_df = pd.DataFrame(list(product(df['S.No'].unique(), df['Name1'].unique(), df['Name2'].unique())), 
                                    columns=['S.No', 'Name1', 'Name2'])

df = df.merge(fill_df, on=['S.No', 'Name1', 'Name2'], how='right')

pvtdf = df.pivot_table(index='S.No', columns=['Name1', 'Name2'], 
                       values='Size', aggfunc='max', dropna=False)\
                       .rename_axis([None, None], axis="columns")    
print(pvtdf)
#      ABC             BCA         DAB          
#      XCZ   XYZ ZXM   XCZ XYZ ZXM XCZ XYZ   ZXM
# S.No                                          
# 1    NaN  12.0 NaN   NaN NaN NaN NaN NaN   NaN
# 2    NaN   NaN NaN  15.0 NaN NaN NaN NaN   NaN
# 3    NaN   NaN NaN   NaN NaN NaN NaN NaN  20.0

0
投票

您也可以使用.unstack来获得所需的多索引格式。

让我们说df是你的数据框架。做这个:

df = df.set_index(['S.No','Name1','Name2'])['Size'].unstack(level=-2).unstack(level=-1)
df.columns.names = [None, None]
df = df.reindex(columns=['XYZ', 'XCZ', 'ZXM'], level = 1)
df.fillna('', inplace=True) # if you want to replace NAs with blanks

print(df)

       ABC          BCA          DAB
       XYZ XCZ ZXM  XYZ XCZ ZXM  XYZ XCZ ZXM
S.No                                    
1      12                           
2                       15                  
3                                        20
© www.soinside.com 2019 - 2024. All rights reserved.