我有一个具有两个总计的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 :(得分: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)
将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
答案 2 :(得分:-1)
您可以手动划分适合您需要的列,例如:
df['v1'] = (df['v1'] / df['t1']) * 100