使用Python Pandas进行CSV列比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python Pandas进行CSV列比较相关的知识,希望对你有一定的参考价值。

我有一个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进行比较,但如果不需要匹配,请为assigns添加NaN的新列。然后使用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 Pandas进行CSV列比较的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas——Read_csv详解

pandas读取excel文件指定列

如何在 Python 中使用 Pandas 创建会计年度列?

比较子集和超集 CSV 的列,并在 Pandas 中输出相交列 + 超集 CSV 的另一列

使用 python pandas 在多个列中进行选择?

python pandas 读取csv后怎么改变列的顺序?