[英]Python- Columnwise average from a file
我有一個文件,其內容如下所示:
A B 2 4
C D 1 2
A D 3 4
A D 1 2
A B 4 7 and so on..
我的目標是獲得最終輸出,如下所示:
A B 3 5.5
C D 1 2
A D 2 3
也就是說,對於前兩列的每個唯一組合,結果應為文件中其他兩列的按列平均值。 我嘗試使用循環,但這只是增加了程序的復雜性。 是否有其他方法可以實現目標。
樣例代碼:
with open(r"C:\Users\priya\Desktop\test.txt") as f:
content = f.readlines()
content = [x.split() for x in content]
for i in range(len(content)):
valueofa=[content[i][2]]
valueofb=[content[i][3]]
for j in xrange(i+1,len(content)):
if content[i][0]==content[j][0] and content[i][1]==content[j][1]:
valueofa.append(content[j][2])
valueofb.append(content[j][3])
我打算將兩個列表的平均值作為索引。
您可以將每個字母組合作為一個元組存儲在字典中,然后在末尾取平均值,例如:
d = {}
with open(r"C:\Users\priya\Desktop\test.txt") as f:
for line in f:
a, b, x, y = line.split()
d.setdefault((a, b), []).append((int(x), int(y)))
for (a, b), v in d.items():
xs, ys = zip(*v)
print("{} {} {:g} {:g}".format(a, b, sum(xs)/len(v), sum(ys)/len(v)))
輸出:
A B 3 5.5
C D 1 2
A D 2 3
如果您可以使用熊貓,它將更加簡單:
import pandas as pd
df = pd.read_csv(r"C:\Users\priya\Desktop\test.txt", names=['A','B','C','D'])
df
A B C D
0 A B 2 4
1 C D 1 2
2 A D 3 4
3 A D 1 2
4 A B 4 7
df.groupby(['A','B']).mean().reset_index()
A B C D
0 A B 3.0 5.5
1 A D 2.0 3.0
2 C D 1.0 2.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.