Python-熊猫:具有两个总计的Split-Divide DataFrame

时间:2018-10-26 04:13:40

标签: python pandas dataframe

我有一个具有两个总计的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 :(得分:2)

您可以使用基本除法:

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

答案 1 :(得分:0)

filterdiv进行除法并通过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

答案 2 :(得分:-1)

您可以手动划分适合您需要的列,例如:

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