Python - Pandas: разделение-разделение DataFrame с двумя итогами - PullRequest
0 голосов
/ 26 октября 2018

У меня есть 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 могут либо остаться, либо быть удалены

ура!

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

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

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
0 голосов
/ 26 октября 2018

Используйте 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
0 голосов
/ 26 октября 2018

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

df['v1'] = (df['v1'] / df['t1']) * 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...