首页 > 解决方案 > 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

标签: pandasdataframepandas-groupby

解决方案


尝试:

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

推荐阅读