我有一个txt文件,它的格式是这样的:
thi is a junk data line to be ignored abc xyz dsfgsrj
AFKSDNG-RBI 20200706 MARS stu base-1
AFKSDNG-UBI 20200706 JUPITER uyt base-2
AFKSDNG-ABI 20200706 MARS stu base-1
AFKSDNG-XBI 20200706 JUPITER uyt base-2
AFKSDNG-XBI 20200706 MARS stx base-1
请注意,我在txt文件中只有原始数据,在标题中没有任何列名称,指示每列的上下文。
每一列由一个或多个空格与其他列分隔。
例如,如果我想计算'MARS'的出现次数,它将是2而不是3,因为最后一条记录的第4列与前面的记录不同('stx')。
我需要计算所有唯一的事件,并生成一个Excel文件,如下所示:
Column 1 Column 2 Column 3 Column 4 Column 5 Column 6 (occurences)
AFKSDNG-RBI 20200706 MARS stu base-1 2
AFKSDNG-UBI 20200706 JUPITER uyt base-2 2
AFKSDNG-ABI 20200706 MARS stu base-1 2
AFKSDNG-XBI 20200706 JUPITER uyt base-2 2
AFKSDNG-XBI 20200706 MARS stx base-1 1
更好的输出是在计数后删除重复的记录,以便:
Column 1 Column 2 Column 3 Column 4 Column 5 Column 6 (occurences)
AFKSDNG-RBI 20200706 MARS stu base-1 2
AFKSDNG-UBI 20200706 JUPITER uyt base-2 2
AFKSDNG-XBI 20200706 MARS stx base-1 1
我试着用python写了这段代码来阅读和生成Excel:
import pandas as pd
df = pd.read_csv('CD202205.txt', engine='python', sep='\s{3,}', header=None, skiprows=1)
df.to_excel('export.xlsx', index=False, sheet_name='SHEET1')
但我不知道如何计算发生的次数。我是python和pandas的新手,因此任何帮助都将受到高度赞赏。
----------------------------------------------------------------------------------------------
我注意到一个小问题,如果我们稍微改变源txt文件。正如我之前所说的,最后一个“MARS”与前面的不同,因为第四列“stx”不同。**为了是唯一的,它只需要从第3,第4或第5列中的一列是不同的。
示例
thi is a junk data line to be ignored abc xyz dsfgsrj
AFKSDNG-RBI 20200706 MARS stu base-1
AFKSDNG-UBI 20200706 JUPITER uyt base-2
AFKSDNG-ABI 20200706 MARS stu base-1
AFKSDNG-XBI 20200706 JUPITER uyt base-2
AFKSDNG-XBI 20200706 MARS stx base-1 // different cuz stx is different
AFKSDNG-XBI 20200706 PLUTO stu base-1 // even though here stu and base-1 is like 'MARS' we have 'PLUTO' so this is a new row
在@jezrael的公认答案中,“冥王星”与“火星”一起计算
1条答案
按热度按时间epggiuax1#
对于计数,使用
GroupBy.transform
和DataFrame.drop_duplicates
:如果需要设置列名:
编辑:使用新数据进行测试: