python-3.x - 连接熊猫数据框中的列表并在另一列中获取唯一标记
问题描述
我有一个由 4 列组成的数据框,第一列是 ID,其他列在每一行中都有列表作为它们的值。我需要连接所有这三列并获取唯一标记并创建另一列。这是一行,我有超过 100 万条记录。
original_df = pd.DataFrame({'ID':1,
'Name_List1':[[ 'aa','bb']],
'Name_List2':[['Mutiso','Julia','Linger']],
'Name_List3':[['Mutiso','Julia','Linger','bb','cc']]})
所需的 df 是此脚本的输出
desired_df = pd.DataFrame({'ID':1,
'Name_List1':[[ 'aa','bb']],
'Name_List2':[['Mutiso','Julia','Linger']],
'Name_List3':[['Mutiso','Julia','Linger','bb','cc']],
'Unique_name_list':[['aa','bb','cc','Mutiso','Julia','Linger']]})
如何获得第 5 列“Unique_name_list”列
解决方案
您可以尝试使用stack()
, explode
(注意这是 pandas 0.25+ 中的新功能)和groupby+agg
, 然后map
m = original_df.set_index('ID').stack().explode()
.drop_duplicates().groupby(level=0).agg(list)
original_df['Unique_name_list'] = original_df['ID'].map(m)
print(original_df)
ID Name_List1 Name_List2 Name_List3 \
0 1 [aa, bb] [Mutiso, Julia, Linger] [Mutiso, Julia, Linger, bb, cc]
Unique_name_list
0 [aa, bb, Mutiso, Julia, Linger, cc]
或(较慢的版本)
您可以尝试apply
使用np.concatenate
and set
:
original_df = original_df.set_index('ID')
final = original_df.assign(Unique_name_list=original_df.apply(lambda x :
[*set(np.concatenate(x))],axis=1)).reset_index()
ID Name_List1 Name_List2 Name_List3 \
0 1 [aa, bb] [Mutiso, Julia, Linger] [Mutiso, Julia, Linger, bb, cc]
Unique_name_list
0 [bb, Mutiso, cc, aa, Julia, Linger]
推荐阅读
- c - C - 将错误的指针类型传递给函数
- c++ - 我不能在 C++ 上使用 fmt 库头文件
- java - 更新集合内的列表 dbref
- python - 如何在 Python 中使用 BeautifulSoup 从 html 中提取特定文本?
- sql - ORA-00906: 缺少左括号 oracle 错误可能是因为我弄乱了语法
- python - 在python中实现Backwards Euler方法来解决钟摆
- html - 如何仅对 CSS 中的给定形状应用过滤器?
- javascript - 客户端 JS/Angular 中是否存在 HTTP 连接超时?
- vue.js - Vue js Vue-cli 执行“npm run build”,将图像不透明度的 css 编译为 1%
- kubernetes - 一个 Pod 可以由两个不同的 ReplicaSet 管理吗?