gpt4 book ai didi

python - 遍历 Pandas 中的行组

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:54 26 4
gpt4 key购买 nike

总的来说,我是 pandas 和 python 的新手 - 感谢您提供的任何指导!

我有一个包含 4 列的 csv 文件。我正在尝试将前三列在所有行上都相同的行组合在一起(列 A 行 1 = 列 A 行 2,列 B 行 1 = 列 B 行 2,等等)

我的数据是这样的:

   phone_number  state   date         description
1 9991112222 NJ 2015-05-14 Condo
2 9991112222 NJ 2015-05-14 Condo sales call
3 9991112222 NJ 2015-05-14 Apartment rental
4 6668885555 CA 2015-05-06 Apartment
5 6668885555 CA 2015-05-06 Apartment rental
6 4443337777 NJ 2015-05-14 condo

所以在这个数据中,第 1、2 和 3 行属于一组,而第 4 和 5 行属于另一组。第 6 行不在包含 1、2 和 3 的组中,因为它具有不同的 phone_number。

然后,对于每一行,我想使用 Levenshtein 距离将描述列中的字符串与该组中的彼此描述进行比较,并保留描述足够相似的行。

第 1 行的“Condo”将与第 2 行的“Condo sales call”和第 3 行的“Apartment rental”进行比较。它不会与第 6 行的“condo”进行比较。

最后,目标是剔除描述与同一组中的另一描述不够相似的行。换句话说,打印出描述至少与该组中的另一个(任何其他)描述有些相似的所有行。理想输出:

   phone_number  state   date         description
1 9991112222 NJ 2015-05-14 Condo
2 9991112222 NJ 2015-05-14 Condo sales call
4 6668885555 CA 2015-05-06 Apartment
5 6668885555 CA 2015-05-06 Apartment rental

第 6 行不打印,因为它从未在组中。第 3 行未打印,因为“Apartment rental”与“Condo”或“Condo sales call”不够相似

这是我目前的代码。我不知道这是否是最好的方法。如果到目前为止我做对了,我不知道如何打印整行感兴趣的内容:

import Levenshtein
import itertools
import pandas as pd

test_data = pd.DataFrame.from_csv('phone_state_etc_test.csv', index_col=None)

for pn in test_data['phone_number']:
for dt in test_data['date']:
for st in test_data['state']:
for a, b in itertools.combinations(test_data[
(test_data['phone_number'] == pn) &
(test_data['state'] == st) &
(test_data['date'] == dt)
]
['description'], 2):
if Levenshtein.ratio(a,b) > 0.35:
print pn, "|", dt, "|", st, "|" #description

这打印了一堆重复的这些行:

9991112222 | NJ | 2015-05-14 |
6668885555 | CA | 2015-05-06 |

但是如果我在打印行的末尾添加描述,我会得到一个

SyntaxError: invalid syntax 

关于如何打印整行有什么想法吗?无论是 pandas dataframe 还是其他格式,都没关系 - 我只需要输出到 csv。

最佳答案

为什么不使用 pandas.groupby 选项来查找唯一组(基于电话号码、州和日期)。这样做可以让您分别处理所有 Description 值,并根据需要对它们执行任何操作。

例如,我将对上述列进行分组,并获取该组中 Description 列的唯一值 -

In [49]: df.groupby(['phone_number','state','date']).apply(lambda v: v['description'].unique())
Out[49]:
phone_number state date
4443337777 NJ 2015-05-14 [condo]
6668885555 CA 2015-05-06 [Apartment, Apartment-rental]
9991112222 NJ 2015-05-14 [Condo, Condo-sales-call, Apartment-rental]
dtype: object

您可以在apply 中使用任何函数。这里有更多示例 - http://pandas.pydata.org/pandas-docs/stable/groupby.html

关于python - 遍历 Pandas 中的行组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30473920/

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