<p>我有一个看起来很简单的问题,我没能找到解决办法。也就是说,我有一个表,其中第一列包含所有可用应用程序的列表,而其他列表示用户和他们拥有的应用程序的列表:</p>
<p><a href="https://i.stack.imgur.com/yeDxH.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/yeDxH.png" alt="enter image description here"/></a></p>
<p>我正在尝试将表转换为DataFrame,并在第一列上对齐匹配的值。所需的输出应如下所示:</p>
<p><a href="https://i.stack.imgur.com/KZdgP.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/KZdgP.png" alt="enter image description here"/></a></p>
<pre><code>import pandas as pd
df = pd.read_excel('U:/Desktop/appdata.xlsx')
df.head(10)
Out[21]:
Applications User 1 User 2 User 3 User 4 User 5
0 App1 App1 App2 App1 App1 App2
1 App2 App3 App3 App2 App3 App3
2 App3 App10 App4 App7 App4 App4
3 App4 NaN App5 App8 App5 App5
4 App5 NaN NaN App10 App6 App6
5 App6 NaN NaN NaN NaN App7
6 App7 NaN NaN NaN NaN App8
7 App8 NaN NaN NaN NaN App9
8 App9 NaN NaN NaN NaN NaN
9 App10 NaN NaN NaN NaN NaN
df[df.apply(lambda x: x['Applications'] == x, axis=1)]
Out[22]:
Applications User 1 User 2 User 3 User 4 User 5
0 App1 App1 NaN App1 App1 NaN
1 App2 NaN NaN App2 NaN NaN
2 App3 NaN NaN NaN NaN NaN
3 App4 NaN NaN NaN NaN NaN
4 App5 NaN NaN NaN NaN NaN
5 App6 NaN NaN NaN NaN NaN
6 App7 NaN NaN NaN NaN NaN
7 App8 NaN NaN NaN NaN NaN
8 App9 NaN NaN NaN NaN NaN
9 App10 NaN NaN NaN NaN NaN
</code></pre>
<p>感谢您的帮助。
干杯!你知道吗</p>
<p>关键的一点是,在输出中,应用程序列中的值也表示该行的值(index col==value col)</p>
<pre><code>(df.iloc[:,1:]
.melt()
.dropna()
.pivot(index='value',columns='variable',values='value')
.reindex([f'App{x}' for x in range(1,11)]))
</code></pre>