python - 平均文件之间的值,但保留不匹配的值

标签 python pandas dataframe

我有两个文件:

文件 1:

key.1   10    6 
key.2    5    6
key.3.   5    8
key.4.   5    10
key.5    4    12

文件 2:

key.1   10    6 
key.2    6    6
key.4    5    10
key.5    2    8

我有一个相当复杂的问题。我想对每个位置的两个文件进行平均。 ID。但是,如果其中一个文件的 ID 是唯一的,我只想将该值保留在输出文件中。所以输出文件看起来像这样:

key.1   10    6 
key.2   5.5   6
key.3.   5    8
key.4.   5    10
key.5    3    10

这是一个例子。实际上,我想对 100 列进行平均。

最佳答案

以下解决方案使用 Pandas,并假设您的数据存储在纯文本文件“file1.txt”和“file2.txt”中。让我知道这个假设是否不正确 - 可能是针对不同文件类型进行的最小编辑。如果我误解了你对"file"这个词的意思,而你的数据已经在 DataFrames 中,你可以忽略第一步。

首先将数据读入DataFrames:

import pandas as pd
df1 = pd.read_table('file1.txt', sep=r'\s+', header=None)
df2 = pd.read_table('file2.txt', sep=r'\s+', header=None)

给我们:

In [9]: df1
Out[9]: 
       0   1   2
0  key.1  10   6
1  key.2   5   6
2  key.3   5   8
3  key.4   5  10
4  key.5   4  12

In [10]: df2
Out[10]: 
       0   1   2
0  key.1  10   6
1  key.2   6   6
2  key.4   5  10
3  key.5   2   8

然后在第 0 列加入这些数据集:

combined = pd.merge(df1, df2, 'outer', on=0)

给予:

       0  1_x  2_x   1_y   2_y
0  key.1   10    6  10.0   6.0
1  key.2    5    6   6.0   6.0
2  key.3    5    8   NaN   NaN
3  key.4    5   10   5.0  10.0
4  key.5    4   12   2.0   8.0

这有点乱,但是我们可以在计算后只选择我们想要的列:

combined[1] = combined[['1_x', '1_y']].mean(axis=1)
combined[2] = combined[['2_x', '2_y']].mean(axis=1)

只选择有用的列:

results = combined[[0, 1, 2]]

这给了我们:

       0     1     2
0  key.1  10.0   6.0
1  key.2   5.5   6.0
2  key.3   5.0   8.0
3  key.4   5.0  10.0
4  key.5   3.0  10.0

我相信这就是您要找的东西。

您没有说明您希望输出的文件格式是什么,但下面将为您提供一个制表符分隔的文本文件。让我知道是否有不同的偏好,我可以编辑。

results.to_csv('output.txt', sep='\t', header=None, index=False)

我应该补充一点,最好为您的列提供相关标签,而不是像我在本例中那样使用数字 - 我只是在此处使用默认整数值,因为我对您的数据集一无所知。

关于python - 平均文件之间的值,但保留不匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49518655/

相关文章:

python - 如何实现红噪声?

python - 如何跳过 for 循环中的特定迭代?

python - Pandas:针对每个个体,查找接近当前观察值的记录数。应用与转换

python - 如何合并两个数据框而不在 Python 中添加重复项?

python - 根据其他列的条件在 Pandas 中创建一个新列

python - 如何融化 Pandas 数据框?

apache-spark - 在 Spark DataFrame 中将空值转换为空数组

python - Flask-WTF - validate_on_submit() 永远不会执行

python - 如何在 Tkinter 中隐藏或禁用鼠标指针?

python - 基于条件的新列