Вычитание двух столбцов, названных по определенной схеме - PullRequest
2 голосов
/ 28 февраля 2020

У меня есть фрейм данных с большим количеством столбцов. Однако в этом вопросе я привел мини-версию 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]})

Я хочу вычесть два столбца с одинаковым префиксом и средней частью. В этом случае 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]})

вычесть два столбца легко, но

  1. сопоставить два столбца с шаблонами
  2. добавить столбцы с отличиями
  3. автоматически присвоить имени столбцу суффикс '_diff'

тяжело.

Спасибо за вашу помощь.

1 Ответ

5 голосов
/ 28 февраля 2020

Идея состоит в том, чтобы создать MultiIndex путем деления последнего _ на str.rsplit, затем выбрать на втором уровне с помощью DataFrame.xs и вычесть, например, на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...