我有一个包含大量列的数据框。然而,在这个问题中,我带来了 df 的迷你版本。
df = pd.DataFrame({'WT_IGL_x':[1,2,3,2,1,1,3,4,1,2], 'LA_WHN_x':[1,0,1,0,1,1,0,0,1,0], 'LA_WHN_y':[2,1,2,3,3,4,1,1,2,1], 'WT_IGL_y':[2,1,2,3,3,4,1,1,2,1], 'GT_OPP_IGL_x':[1,2,3,2,1,1,3,4,1,2], 'GT_OPP_IGL_y':[1,2,3,2,1,1,3,4,1,2]})
Run Code Online (Sandbox Code Playgroud)
我想减去具有相同前缀和中间部分的两列。在这种情况下,第 1/4 列和第 2/3 列并添加具有差异的列并通过添加后缀来命名它们'_diff'
所以我想要的输出是:
df = pd.DataFrame({'WT_IGL_x':[1,2,3,2,1,1,3,4,1,2], 'LA_WHN_x':[1,0,1,0,1,1,0,0,1,0], 'LA_WHN_y':[2,1,2,3,3,4,1,1,2,1], 'WT_IGL_y':[2,1,2,3,3,4,1,1,2,1], 'WT_IGL_diff': [-1, 1, 1, -1, -2, -3, 2, 3, -1, 1], 'LA_WHN_diff': [-1, -1, -1, -3, -2, -3, -1, -1, -1, -1], GT_OPP_IGL_diff: [0,0,0,0,0,0,0,0,0,0]})
Run Code Online (Sandbox Code Playgroud)
减去两列很容易但是
很难。
感谢您的帮助。
想法是MultiIndex通过拆分 last _by创建的str.rsplit,然后通过第二级选择DataFrame.xs并减去,例如 by DataFrame.sub,然后添加DataFrame.add_suffix和最后使用DataFrame.join:
df1 = df.copy()
df1.columns = df1.columns.str.rsplit('_', n=1, expand=True)
df1 = df1.xs('x', axis=1, level=1).sub(df1.xs('y', axis=1, level=1)).add_suffix('_diff')
df1 = df.join(df1)
print (df1)
WT_IGL_x LA_WHN_x LA_WHN_y WT_IGL_y LA_WHN_diff WT_IGL_diff
0 1 1 2 2 -1 -1
1 2 0 1 1 -1 1
2 3 1 2 2 -1 1
3 2 0 3 3 -3 -1
4 1 1 3 3 -2 -2
5 1 1 4 4 -3 -3
6 3 0 1 1 -1 2
7 4 0 1 1 -1 3
8 1 1 2 2 -1 -1
9 2 0 1 1 -1 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |