Python - pandas: разделить-разделить фрейм данных с двумя итогами

У меня есть DataFrame с двумя такими итоговыми значениями:

v1  v2  x1  x2  t1  t2
5   5   8   3   10  11 
4   9   2   1   13   3 
10  10  8   3   20  11 

Как я могу преобразовать это примерно так

v1   v2   x1   x2  t1  t2
50%  50%  72%  28% 10  11
30%  70%  66%  33% 13   3
50%  50%  72%  28% 20  11

Округление не требуется. Итоги T1 и T2 можно сохранить или удалить.

Ваше здоровье!

0
0
46
3

Ответы 3

Вы можете вручную разделить столбцы в соответствии с вашими потребностями, например:

df['v1'] = (df['v1'] / df['t1']) * 100

Это не практично для большого количества столбцов.

EGM8686 26.10.2018 07:09

Я просто показывал базовый пример, не зная предполагаемое количество столбцов и имена столбцов.

BernardL 26.10.2018 07:13

Вы можете использовать базовое деление:

a = df.iloc[:, :4].values
b = np.repeat(df.iloc[:, 4:].values, 2, axis=1)

pd.DataFrame(a / b, columns=df.columns[:4])

    v1        v2        x1        x2
0  0.500000  0.500000  0.727273  0.272727
1  0.307692  0.692308  0.666667  0.333333
2  0.500000  0.500000  0.727273  0.272727

Используйте filter с div для разделения и объедините concat:

df = pd.concat([df.filter(like='v').div(df['t1'], axis=0),
                df.filter(like='x').div(df['t2'], axis=0)], axis=1)
print (df)
         v1        v2        x1        x2
0  0.500000  0.500000  0.727273  0.272727
1  0.307692  0.692308  0.666667  0.333333
2  0.500000  0.500000  0.727273  0.272727

Если хотите также итоговые столбцы:

df = pd.concat([df.filter(like='v').div(df['t1'], axis=0),
                df.filter(like='x').div(df['t2'], axis=0),
                df[['t1','t2']]], axis=1)
print (df)
         v1        v2        x1        x2  t1  t2
0  0.500000  0.500000  0.727273  0.272727  10  11
1  0.307692  0.692308  0.666667  0.333333  13   3
2  0.500000  0.500000  0.727273  0.272727  20  11

Другие вопросы по теме