gpt4 book ai didi

python - Pandas - 将匹配的列值与行对齐

转载 作者:行者123 更新时间:2023-12-01 07:23:57 26 4
gpt4 key购买 nike

我遇到了一个看似简单的问题,但我无法找到解决方案。也就是说,我有一个表,其中第一列包含所有可用应用程序的列表,而其他列代表用户及其拥有的应用程序列表:

enter image description here

我正在尝试将表转换为 pandas DataFrame 并在第一列上对齐匹配值。所需的输出应如下所示:

enter image description here

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

感谢任何帮助。干杯!

最佳答案

这是使用一些 numpy 工具的方法。在这里,apply 循环遍历感兴趣的列,np.isin 对第一列 (dat.Applications) 执行搜索,如果相应元素包含在当前列。然后,此 bool 数组将转换为 dat.Applications 中的相应字符串,如果通过 np.where 没有匹配,则转换为 NAN。然后将结果分配回原始 DataFrame。

import numpy as np

dat.iloc[:, 1:] = \
dat.iloc[:, 1:].apply(lambda x : np.where(np.isin(dat.Applications, x),
dat.Applications, np.NAN))

请注意,例如可以使用 pd.np.isin 而不是直接导入 numpy,但这对我来说似乎更干净。

关于python - Pandas - 将匹配的列值与行对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57544806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com