我有一个问题,我有两个文件,每个都有两列,一个是T,第二列是一个函数,取决于T.我想合并它们,并将它们都写在输出文件中,为此我正在使用以下(由于某些原因使用T = T1 + T2不起作用,这就是我使用扩展的原因)。
T1 = column1_of_file1
Y1 = column2_of_file1
T2 = column1_of_file2
Y2 = column2_of_file2
Total_T = []
Total_Y = []
Total_T.extend(T1)
Total_T.extend(T2)
Total_Y.extend(Y1)
Total_Y.extend(Y2)
我遇到的问题是T1中的元素与T2的元素相同。 T1从1开始,在4中结束,我列在两列的最后7个元素下面:
# T1 Y1
... ...
3.76 -25.8529
3.80 -25.8474
3.84 -25.8422
3.88 -25.8356
3.92 -25.8286
3.96 -25.8133
4.00 -25.7997
并且T2以值3.80开始并且运行到8,但是相应的 Y2的值不同:
#T2 Y2
3.80 -25.7331
3.84 -25.0383
3.88 -24.4059
3.92 -23.8288
3.96 -23.3027
4.00 -22.8242
4.04 -22.3917
... ...
我想要的是合并两个列表,删除T中重复的元素 (我知道如何在T2删除时只为T1做一个)但是因为值 在Y是不同的我想要添加它们,以便最终T_total和 Y_total看起来像:
#T_total Y_total
3.80 Y1[3.80] + Y2[3.80]
3.84 Y1[3.84] + Y2[3.84]
3.88 Y1[3.88] + Y2[3.88]
3.92 Y1[3.92] + Y2[3.92]
3.96 Y1[3.96] + Y2[3.96]
4.00 Y1[4.00] + Y2[4.00]
有什么想法吗? T1和T2的长度不同,因此Y1,Y2的长度也不同。
答案 0 :(得分:0)
您可以使用collections.defaultdict
。
假设你想要一个y1和y2的列表,这个有效:
.ui-autocomplete { width: 1%; }
from collections import defaultdict
text1='''3.76 -25.8529
3.80 -25.8474
3.84 -25.8422
3.88 -25.8356
3.92 -25.8286
3.96 -25.8133
4.00 -25.7997 '''
text2 = '''3.80 -25.7331
3.84 -25.0383
3.88 -24.4059
3.92 -23.8288
3.96 -23.3027
4.00 -22.8242
4.04 -22.3917'''
f1 = {line.split()[0] : line.split()[1] for line in text1.splitlines()}
f2 = {line.split()[0] : line.split()[1] for line in text2.splitlines()}
f_total = defaultdict(list)
for key,value in f1.items():
f_total[key].append(value)
for key,value in f2.items():
f_total[key].append(value)
print (f_total)
如果您只想添加它们,只需将defaultdict(<class 'list'>, {
'3.76': ['-25.8529'],
'4.00': ['-25.7997', '-22.8242'],
'4.04': ['-22.3917'],
'3.80': ['-25.8474', '-25.7331'],
'3.88': ['-25.8356', '-24.4059'],
'3.92': ['-25.8286', '-23.8288'],
'3.84': ['-25.8422', '-25.0383'],
'3.96': ['-25.8133', '-23.3027']})
类型更改为defaultdict
:
float
f1 = {line.split()[0] : float(line.split()[1]) for line in text1.splitlines()}
f2 = {line.split()[0] : float(line.split()[1]) for line in text2.splitlines()}
f_total = defaultdict(float)
for key,value in f1.items():
f_total[key]+=value
for key,value in f2.items():
f_total[key]+=value
print (f_total)
答案 1 :(得分:0)
如果您愿意使用pandas,请尝试以下操作(我假设您的数据是以制表符分隔的。)
import pandas as pd
df1 = pd.read_table('file1.dat', names=['T','Y1'], index_col='T')
df2 = pd.read_table('file2.dat', names=['T','Y2'], index_col='T')
result = pd.concat([df1, df2], axis=1).dropna()
result['Y_total'] = result.Y1 + result.Y2
print(result)
使用您的测试数据,会产生以下输出:
Y1 Y2 Y_total
T
3.80 -25.8474 -25.7331 -51.5805
3.84 -25.8422 -25.0383 -50.8805
3.88 -25.8356 -24.4059 -50.2415
3.92 -25.8286 -23.8288 -49.6574
3.96 -25.8133 -23.3027 -49.1160
4.00 -25.7997 -22.8242 -48.6239
最后,如果你只想要一个带有&#39; Y_total&#39;的数据框架。专栏,使用:
result.loc[:, ['Y_total']]