共享相似变量的行之间的差异

时间:2019-01-14 17:01:49

标签: python pandas dataframe match

我有一张表(大约14,000行或100行左右),顺序不能更改。每行都由许多列组成唯一,下面我将对其进行简化。

假设我们有下表,我需要创建一个新列,该列采用共享相同Col2 / Col3(但按列1唯一)的行之间的差异。理想情况下,我不想触及此命令。

注意:实际上,有7个变量将完全匹配,而有1个变量将剩下两个。 即组合变量为2-A-A-A-A-A-A-A / 5-A-A-A-A-A-A-A-A。当前7个变量相同时,总是只剩下2个,我正在比较这两个变量。

谢谢!

    Col1    Col2    Col3    Percentage
     2       A       X        5%
     2       B       Y        4%
     2       C       Z        3%
     5       A       X        2%
     5       B       Y        1%
     5       C       Z        5%

   Desired:

   Col1    Col2    Col3    Percentage   Difference
      2       A       X        5%        3%   (*note: matches A/X to get 5%-2%=3%)
      2       B       Y        4%        3%      
      2       C       Z        3%       -2%
      5       A       X        2%        3%
      5       B       Y        1%        3%
      5       C       Z        5%       -2%

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,但是我相信效率低下!

我创建了一个新的数据框

df2 = df[['Col1','Col2','Co3','Percentgage']]

在df2中创建一个新列,该列是第1列的镜像(即,如果2 = 5,如果5 = 2)

df2['opposite_col1'] = np.where(df2['Col1']==2,5,2)

删除了原始列1,并将新列重命名为列1

df2.drop('Col1',axis=1)
df2.columns = ['Col2,'Col3','Mirror_Percentgage','Col1']

这看起来像这样(注意,与表1相同,只是col1被镜像了)。

Col1    Col2    Col3    Mirror_Percentage
 5       A       X        5%
 5       B       Y        4%
 5       C       Z        3%
 2       A       X        2%
 2       B       Y        1%
 2       C       Z        5%

然后只需将df合并到Col1,Col2,Col3上-剩下的就是原始表,除了'Mirror_Percentgage'的附加列。

然后我创建一个新列来查找页边距:

df['Mirror_margin'] = df['Percentgage'] - df['Mirror_Percentgage']