python-2.7 - 使用 Python Pandas 进行 CSV 列比较

标签 python-2.7 pandas dataframe compare multiple-columns

我有一个 pandas 数据框 df1

Time   sat1  sat2 sat3  sat4    val1  val2  val3   val4
10      2     4    2     4       0.1  -1.0   1     2.0
20      3     1    1     3       1.6   0     2.1   -0.7
30      12    8    8     16      0.5   1.1   0.6    2.0
40      2     1    2     12      1.0   1.2   0.4    3.7

我想随时将 sat1、sat2 与 sat3 和 sat4 进行比较。 如果这两列之间存在匹配,我想获得匹配的数量 元素并减去匹配元素值列。

预期输出:

 match_count         Reslt_1           Reslt_2
 2                 val1-val3         val2-val4
 2                 val1-val4         val2-val3
 1                 Nan               val2-val3
 1                 val1-val3          Nan       ( w.r.t match found in sat1 or sat2)          

这些数据是示例数据,列数可能会增加。 sat1、sat2 中的数据在 sat3 和 sat4 中切换,这就是为什么会相应地发生减法。

如何使用 pandas 获得高于预期的输出。我获得了上面的数据框 使用 pandas concat 函数。

最佳答案

您可以与 eq 进行比较,但如果不需要匹配,则为 NaN 添加带有 assign 的新列。然后使用 argmax 获取列的位置,提取 val 列中的值并减去:

#remove trailing whitespaces in columns names
df.columns = df.columns.str.strip()

a = df[['sat3','sat4']].eq(df['sat1'], axis=0).assign(no = True)
a1 = a.values.argmax(axis=1)
df['Reslt_1'] =  df['val1'] - df[['val3','val4']].assign(no = np.nan).values[df.index, a1]

b = df[['sat3','sat4']].eq(df['sat2'], axis=0).assign(no = True)
b1 = b.values.argmax(axis=1)
df['Reslt_2'] =  df['val2'] - df[['val3','val4']].assign(no = np.nan).values[df.index, b1]

df['match_count'] = a.sum(1) - 1 + b.sum(1) - 1

print (df)

   Time  sat1  sat2  sat3  sat4  val1  val2  val3  val4  Reslt_1  Reslt_2  \
0    10     2     4     2     4   0.1  -1.0   1.0   2.0     -0.9     -3.0   
1    20     3     1     1     3   1.6   0.0   2.1  -0.7      2.3     -2.1   
2    30    12     8     8    16   0.5   1.1   0.6   2.0      NaN      0.5   
3    40     2     1     2    12   1.0   1.2   0.4   3.7      0.6      NaN   

   match_count  
0            2  
1            2  
2            1  
3            1  

关于python-2.7 - 使用 Python Pandas 进行 CSV 列比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47900641/

相关文章:

applymap 中的 Python 引用行

python - 从 Javascript 到 Python - 了解类、方法和属性的工作原理

python - Pandas 在 python 中填充昨天数据(相同的 DateTime)中的缺失值

python-3.x - 如何在Python中将文本字符串列表转换为pandas数据框?

python - 将滚动平均值应用于列时如何填充第一个 N/A 单元格-python

python - Pandas.DataFrame.rename 方法中的参数 "index"是什么?

python - Pandas:如何用 nan 维护列的类型?

python - Pandas:如何删除具有重复复合键的行,同时保持缺失值分布在重复项之间?

python-2.7 - 从多个摄像头写入视频

python - 无法使用 Pip 安装任何包