我有一个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
答案 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