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 NaN
s and forward fill missing values, then filtere out these rows with inverted mask by ~
in boolean indexing
、rename
列并更改列的顺序:
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
我有一个类似
的DataFrameevent 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 NaN
s and forward fill missing values, then filtere out these rows with inverted mask by ~
in boolean indexing
、rename
列并更改列的顺序:
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