分层分组文本文件中的列值
Hierarchically grouping column values in text file
有没有办法按列对文本文件中的值进行分组?
我有一个文本文件,其值类似于
a,b,c
a,x,y
a,z,m
b,x,y
b,z,m
并且需要将值分组到唯一的第一列,如下所示。
a, b;x;z, c;y;m
b, x;z, y;m
假设您的文本文件每行只有三列,
s1, s2, s3 = set(), set(), set()
with open('file.txt') as txt_file:
lines = txt_file.readlines()
for line in lines:
line = line.strip()
c1, c2, c3 = line.split(',')
s1.add(c1)
s2.add(c2)
s3.add(c3)
col1 = ';'.join(s1)
col2 = ';'.join(s2)
col3 = ';'.join(s3)
print("{}, {}, {}".format(col1, col2, col3))
所以如果文件file.txt
的内容是:
a,b,c
a,x,y
a,z,m
输出:
a, b;z;x, y;m;c
您可以尝试使用 pandas
myFile.txt
a,b,c
a,x,y
a,z,m
b,x,y
b,z,m
import pandas as pd
with open('myFile.txt', 'r') as xf:
data = xf.read()
print("Input data", data, sep='\n')
d = [values.split(',') for values in data.split('\n') if values != ""]
df = pd.DataFrame(data=d, columns = list('ABC'))
result = df.groupby(['A']).sum()
result = result.applymap(lambda x: ';'.join(x))
print("\nSolution", result, sep="\n")
输出:
Input data
a,b,c
a,x,y
a,z,m
b,x,y
b,z,m
Solution
B C
A
a b;x;z c;y;m
b x;z y;m
如果您不关心使用分号和逗号进行格式化,一个简单的方法是将它们分组到字典中:
with open('sample.txt') as f:
lines = f.readlines()
dic = {}
for line in lines:
lst = line.strip().split(',')
dic[lst[0]] = dic.get(lst[0], []) + lst[1:]
print(dic)
# {'a': ['b', 'c', 'x', 'y', 'z', 'm'], 'b': ['x', 'y', 'z', 'm']}
有没有办法按列对文本文件中的值进行分组? 我有一个文本文件,其值类似于
a,b,c
a,x,y
a,z,m
b,x,y
b,z,m
并且需要将值分组到唯一的第一列,如下所示。
a, b;x;z, c;y;m
b, x;z, y;m
假设您的文本文件每行只有三列,
s1, s2, s3 = set(), set(), set()
with open('file.txt') as txt_file:
lines = txt_file.readlines()
for line in lines:
line = line.strip()
c1, c2, c3 = line.split(',')
s1.add(c1)
s2.add(c2)
s3.add(c3)
col1 = ';'.join(s1)
col2 = ';'.join(s2)
col3 = ';'.join(s3)
print("{}, {}, {}".format(col1, col2, col3))
所以如果文件file.txt
的内容是:
a,b,c
a,x,y
a,z,m
输出:
a, b;z;x, y;m;c
您可以尝试使用 pandas
myFile.txt
a,b,c
a,x,y
a,z,m
b,x,y
b,z,m
import pandas as pd
with open('myFile.txt', 'r') as xf:
data = xf.read()
print("Input data", data, sep='\n')
d = [values.split(',') for values in data.split('\n') if values != ""]
df = pd.DataFrame(data=d, columns = list('ABC'))
result = df.groupby(['A']).sum()
result = result.applymap(lambda x: ';'.join(x))
print("\nSolution", result, sep="\n")
输出:
Input data
a,b,c
a,x,y
a,z,m
b,x,y
b,z,m
Solution
B C
A
a b;x;z c;y;m
b x;z y;m
如果您不关心使用分号和逗号进行格式化,一个简单的方法是将它们分组到字典中:
with open('sample.txt') as f:
lines = f.readlines()
dic = {}
for line in lines:
lst = line.strip().split(',')
dic[lst[0]] = dic.get(lst[0], []) + lst[1:]
print(dic)
# {'a': ['b', 'c', 'x', 'y', 'z', 'm'], 'b': ['x', 'y', 'z', 'm']}