熊猫通过反向补充字符串合并列

时间:2018-09-12 23:22:00

标签: python pandas dataframe merge data-manipulation

因此,我坚持如何在熊猫中使用数据处理技术。我下面有一个示例数据框,每行总计25个计数。 我想按相反的称赞顺序合并列名。

    SELECT  J.JOB, 
            CASE  WHEN J.ITEM1 = 'cc' 
                  THEN I1.Unit_Wt * j.QTY
                  ELSE 0
                  END 
                    + CASE  WHEN J.ITEM2 = 'cc' 
                            THEN I2.Unit_Wt * j.QTY
                            ELSE 0
                            END AS cc_tot_wt

    FROM    #Job AS J
            LEFT JOIN #Item AS I1
              ON I1.ITEM = J.ITEM1
            LEFT JOIN #Item AS I2
              ON I2.ITEM = J.ITEM2

    WHERE   I1.ITEM = 'cc' 
            OR I2.ITEM = 'cc'

“ AA”和“ TT”列彼此相反,与“ CC”和“ GG”一样

   AA CC GG AT TT

    4  7  0  9  5
    3  8  5  5  2
    8  6  2  8  1

如何匹配列名称的反称赞并将其与另一列的名称合并。

注意:我已经有一个函数来查找字符串的反补语

1 个答案:

答案 0 :(得分:1)

我建议仅使用pd.concat创建一个新框架:

new_df = pd.concat([df[['AA', 'TT']].sum(1).rename('AA/TT'),
                    df[['CC', 'GG']].sum(1).rename('CC/GG'),
                    df['AT']], axis=1)

>>> new_df
   AA/TT  CC/GG  AT
0      9      7   9
1      5     13   5
2      9      8   8

通常,您可以通过列表理解来做到这一点。给出相反的称赞:

reverse_compliments = [['AA','TT'], ['CC','GG']]

在原始数据框列中找到那些没有反向称赞的值(这里可能有更好的方法,但这是可行的):

reverse_compliments.append(df.columns.difference(
    pd.np.array(reverse_compliments)
    .flatten()))

并结合列表理解使用pd.concat

new_df = pd.concat([df[x].sum(1).rename('/'.join(x)) for x in reverse_compliments],
                   axis=1)

>>> new_df
   AA/TT  CC/GG  AT
0      9      7   9
1      5     13   5
2      9      8   8