melt 和 drop 的反向复制数据框

Reverse of melt and drop duplicates dataframe

我有一个类似

的DataFrame
event   entity  type
1       T1      Table
1       C1      Cell
1       C2      Cell
2       T2      Table
2       C3      Cell

我想把它转换成这样

event   Table   Cell
1       T1      C1
1       T1      C2
2       T2      C3

这是 pd.melt 和 drop_duplicates() 的输出,我读到 melt 的对立面是 pivot,因此尝试在单个事件中采用这种方式。

df.pivot_table(values='entity', index='event', columns='type')

但这会引发错误 DataError: No numeric types to aggregate,这很明显,因为 pivot 按聚合进行分组并且不会复制每个组合。知道这种操作究竟可以用什么来完成吗?请注意我为了简化而丢弃的 groupby 东西。

使用 Series.where for repalce non Table rows to NaNs and forward fill missing values, then filtere out these rows with inverted mask by ~ in boolean indexingrename 列并更改列的顺序:

m = df['type'].eq('Table')
df['Table'] = df['entity'].where(m).ffill()
df = df[~m].rename(columns={'entity':'Cell'})[['event','Table','Cell']]
print (df)
   event Table Cell
1      1    T1   C1
2      1    T1   C2
4      2    T2   C3