我想在python中编写这个脚本。 我有一堆信用卡交易的数据集。这包括日期,帐号,金额(购买或信用/退款) 数据看起来像这样
Acct Number --- Amount
4445 --- $20
4445 --- $30
4445 --- $30
7555 --- $50
7555 --- $50
7555 --- $60
首先,我想将帐号与金额相结合,就像这样
4445 | 20
4445 | 30
4445 | 30
7555 | 50
7555 | 50
7555 | 60
然后,我将根据它们的出现计算整个列表中的每个元组。例如:
4445 | 20 | 1
4445 | 30 | 1
4445 | 30 | 2
7555 | 50 | 1
7555 | 50 | 2
7555 | 60 | 1
正如你所看到的,元组(4445 | 20)只出现一次,我想算为1 元组(4445 | 30)出现两次,所以我想将第一个元组计为1,将第二个元组计为2。
同样,元组(7555 | 50)出现两次,第一次出现将计为1,接下来为2, 并且(7555 | 60)只显示一次,所以算作1。
我正在尝试几种方法,但它没有给我我想要的东西。 真的很感谢你的帮助。
感谢。
答案 0 :(得分:1)
from collections import Counter
lines = list()
with open("data.text", 'r', encoding="utf-8") as data:
for line in data[1:]:
lines.append(line.split(" --- $"))
ct = Counter(lines)
for item in ct:
print(' | '.join([*item, str(ct[item])]))
答案 1 :(得分:1)
以下使用Batch Process
,它要求对输入进行排序,以及itertools.groupby
,它为我们提供可迭代项目的索引。我们将每一行视为一个字符串,然后在其后附加计数。
enumerate
这导致:
L = [["4445 | 20","4445 | 30","4445 | 30"],
["7555 | 50","7555 | 50","7555 | 60"]]
from itertools import groupby
R = [[ r + ' | ' + str(i+1)
for h,g in groupby(A)
for i,r in enumerate(g)] for A in L]
for A in R:
for r in A:
print r
print
答案 2 :(得分:0)
你应该使用嵌套字典,其中键为account
,键是另一个字典,amount
为key
,外观为值。
from collections import defaultdict
data_dict = defaultdict(dict)
with open(file,r):
for line in file:
acc.amount = line.split(',')#assuming the data is split based on a comma
data_dict[acc][amount] = data_dict[acc].get(amount,0)+1
#print it like so
for key in data_dict:
for am in data_dict[key]:
print(key,data_dict[key],data_dict[key][am])