擅长:python、mysql、java
<p>IIUC公司:</p>
<pre><code>d = df.set_index('user')[['cat1', 'cat2']].stack().str.get_dummies().sum(level=[0, 1])
d
A B D E F
user
12345 cat1 1 0 1 0 0
cat2 0 1 0 0 1
67890 cat1 0 0 1 1 0
cat2 0 0 0 0 2
34567 cat1 0 0 0 1 0
cat2 0 0 0 0 1
</code></pre>
<p>然后是客房部</p>
<pre><code>d.unstack().swaplevel(0, 1, 1).sort_index(1).loc[:, lambda x: x.gt(0).any()]
cat1 cat2
A D E B F
user
12345 1 1 0 1 1
34567 0 0 1 0 1
67890 0 1 1 0 2
</code></pre>
<p>如果你喜欢的话,可以合并等级</p>
<pre><code>d.unstack().swaplevel(0, 1, 1).sort_index(1).loc[:, lambda x: x.gt(0).any()].pipe(
lambda x: x.set_axis([f'{a}_{b}' for a, b in x.columns], axis=1, inplace=False)
)
cat1_A cat1_D cat1_E cat2_B cat2_F
user
12345 1 1 0 1 1
34567 0 0 1 0 1
67890 0 1 1 0 2
</code></pre>