因此,我坚持如何在熊猫中使用数据处理技术。我下面有一个示例数据框,每行总计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
如何匹配列名称的反称赞并将其与另一列的名称合并。
注意:我已经有一个函数来查找字符串的反补语
答案 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