pandas - Python pandas将不同版本的数字转换为一个
问题描述
我在 pandas 工作,拥有超过 100,000 条线路的大型电话连接报告。像这样:
问题是这些报告中的电话号码拼写不同。例如:8869836, 298869836, 359298869836 是同一个号码,但是写成简单的,国内的和国际的格式。如果我按电话号码应用分组(groupby),我会得到不正确的结果,因为大熊猫会将同一号码的不同形式视为不同的号码。因此,我决定创建一个额外的系列来输入最长版本的数字,如下所示:
但我不知道如何快速有效地进行这样的转变。也许有人有一些想法?
为工作示例添加代码:
import pandas as pd
data = [
['2021-05-31 10-51-04', 23, 'tel-out', '3302037'],
['2021-05-31 11-04-06', 71, 'tel-out', '298869836'],
['2021-05-31 11-07-07', 21, 'tel-out', '8869836'],
['2021-05-31 11-21-54', 53, 'tel-out', '333468650'],
['2021-05-31 11-23-06', 96, 'tel-in', '359333468650'],
['2021-05-31 13-21-23', 9, 'tel-out', '3468650'],
['2021-05-31 14-33-18', 1, 'sms-in', '870'],
['2021-05-31 15-06-28', 55, 'tel-out', '298869836'],
['2021-05-31 15-07-36', 1, 'sms-in', '359298869836'],
['2021-05-31 15-07-50', 71, 'tel-out', '359333182504'],
['2021-05-31 15-13-18', 22, 'tel-out', '3182504']
]
df = pd.DataFrame(data, columns = ['F0', 'F1', 'F2', 'F3'])
df
解决方案
尝试:
df["F3-1"] = df.groupby(df["F3"].str[-7:])["F3"].transform(
lambda x: max(x, key=len)
)
print(df)
印刷:
F0 F1 F2 F3 F3-1
0 2021-05-31 10-51-04 23 tel-out 3302037 3302037
1 2021-05-31 11-04-06 71 tel-out 298869836 359298869836
2 2021-05-31 11-07-07 21 tel-out 8869836 359298869836
3 2021-05-31 11-21-54 53 tel-out 333468650 359333468650
4 2021-05-31 11-23-06 96 tel-in 359333468650 359333468650
5 2021-05-31 13-21-23 9 tel-out 3468650 359333468650
6 2021-05-31 14-33-18 1 sms-in 870 870
7 2021-05-31 15-06-28 55 tel-out 298869836 359298869836
8 2021-05-31 15-07-36 1 sms-in 359298869836 359298869836
9 2021-05-31 15-07-50 71 tel-out 359333182504 359333182504
10 2021-05-31 15-13-18 22 tel-out 3182504 359333182504
推荐阅读
- sql-server - 无法从 Azure 数据库迁移服务访问本地服务器的网络共享路径
- linux - tcsh 脚本中设置的环境变量不适用于 bash 脚本
- jenkins - Jenkinsfile 中的 Anaconda
- weaviate - 为 Weaviate 架构中的属性选择正确的名称
- r - 尝试使用循环对列表中的向量进行排序时的奇怪行为
- java - 如何将不带前缀的 childElements 添加到 Soap 标头?
- matlab - 如何向量化二维矩阵每一行的外积矩阵的评估?
- python - 查找熊猫数据框中出现次数最多的 timedelta 小时
- php - 使用php在会话中存储表单数据
- sql - 如何优化 sql 查询以提高性能