python - 在具有相同 ID 的单个元素或行中拆分列表 os 字符串和整数
问题描述
我想要有一个元素列表的行,起初我有一个具有这种结构的 DataFrame:
╔═══════════════════════════════════╦════════════╦══════════╦═════════════╗
║ url ║ date ║ name ║ numMentions ║
║ www.newspaperarticle ║ 2018-12-31 ║ Bill ║ 2 ║
║ www.newspaperarticle ║ 2018-12-31 ║ Cosby ║ 3 ║
║ www.newspaperarticle ║ 2018-12-31 ║ New York ║ 1 ║
║
╚═══════════════════════════════════╩════════════╩══════════╩═════════════╝
我将其更改为一个结构,其中名称中的单词和 numMentions 中的数字通过分组附加到 IDS url/name 一次:
df.groupby(['url','date'], as_index=False).agg({
'name': lambda x: list(x),
'numMentions': lambda x: list((map(str,x))),
'avgSalience':lambda x: list((map(str,x)))
})
我得到了以下数据框:
╔══════════════════════╦════════════╦═══════════════════════╦═════════════╗
║ url ║ date ║ name ║ numMentions ║
║ www.newspaperarticle ║ 2018-12-31 ║ [Bill,Cosby,NewYork] ║ [2,3,1] ║
╚══════════════════════╩════════════╩═══════════════════════╩═════════════╝
我想要的是能够访问列表中的单个单词,因为当前列表只是一个包含所有单词的元素或如下结构:
╔═══════════════════════════════════╦════════════╦══════════╦═════════════╗
║ url ║ date ║ name ║ numMentions ║
║ www.newspaperarticle ║ 2018-12-31 ║ Bill ║ 2 ║
║ ║ Cosby ║ 3 ║
║ ║ New York ║ 1 ║
║
╚═══════════════════════════════════╩════════════╩══════════╩═════════════╝
解决方案
在你的 groupby 之后,你可以使用 Pandas Series 字符串函数 "join",它的工作原理与 python str "join" 一样。
df.name.str.join(' ')
和:
df.numMentions.str.join(' ')
这将为您提供值,您只需将其重新分配给相关系列即可。
编辑
这对我有用:
import pandas as pd
data = {
'url': ['www.newspaperarticle', 'www.newspaperarticle', 'www.newspaperarticle'],
'date': ['2018-12-31', '2018-12-31', '2018-12-31'],
'name': ['Bill', 'Cosby', 'New York'],
'numMentions': [2, 3, 1]
}
df = pd.DataFrame(data)
grouped = df.groupby(['url','date'], as_index=False).agg({
'name': lambda x: list(x),
'numMentions': lambda x: list((map(str, x)))
})
names = grouped.name.str.join(' ')
numMentions = grouped.numMentions.str.join(' ')
new = grouped.assign(name=names, numMentions=numMentions)
print(new)
这产生:
url date name numMentions
0 www.newspaperarticle 2018-12-31 Bill Cosby New York 2 3 1
推荐阅读
- elasticsearch - 弹性:没有可用于此声明的持久卷,也没有设置存储类
- python - 导入脚本并使用 APScheduler 和 Python 运行它
- android - 如何在颤动中使用 RepaintBoundary 将整个小部件变成图像
- android-workmanager - 单击按钮时,正在运行的工作管理器服务如何取消?
- python - 按列中的最大数量过滤
- excel - 带有偏移的 VBA Excel 循环,用于扩展单元格范围
- java - Clickhouse 在 INSERT INTO CSV 上的 DateTime 值无效
- python - 基于布尔值扩展选择
- javascript - dotenv throw err internal/modules/cjs/loader.js:800 找不到模块
- c# - 处理使用 C# 打开 Excel 文件时弹出的宏