如何根据该列中的唯一值制作分层列

时间:2018-03-05 19:15:35

标签: python pandas dataframe

我有一个pandas数据框,如下所示:

S.No 名称1 名称2 尺寸

1 ABC XYZ 12

2 BCA XCZ 15

3 DAB ZXM 20

如何为Name1列中的所有唯一值创建一个hierarcial列,然后是Name2中包含所有唯一值的列,这将使数据框看起来如下所示:

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您也可以使用const source = this.http.post().pipe(share()); source.subscribe(console.log); timer(10000).takeUntil(source).subscribe(() => console.log('It\'s taking over 10 sec')); 获取所需的多索引格式。

我们说.unstack是您的数据框架。这样做:

df