使用 Python Pandas 的 CSV 列比较



我有一个熊猫数据框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中切换,这就是为什么减法会发生相应的原因。

如何使用熊猫获得高于预期的输出。我获得了上面的数据帧 使用熊猫连接功能。

您可以与eq进行比较,但如果需要匹配,请添加带有assign的新列,用于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  

相关内容

  • 没有找到相关文章

最新更新