问题描述
import pandas as pd
import numpy as np
d = {'col1': [100,198,495,600,50],'col2': [99,200,500,594,100],'col3': [101,202,505,606,150]}
df = pd.DataFrame(data=d)
df
由此我得到一个简单的表格:
col1 col2 col3
0 100 99 101
1 198 200 202
2 495 500 505
3 600 594 606
4 50 100 150
从这里我想获取第一行中所有值的 %CV,然后是第二行,依此类推...
无论表格有多少列,我都希望它都能工作。
我可以用几行代码做到这一点:
df_shape = df.shape
CV_list = []
for i in range(df_shape[0]):
CV = np.std(df.iloc[i,:],ddof=1) / np.mean(df.iloc[i,:]) * 100
CV_list.append(str(round(CV,3)) + ' %')
df["cv"] = CV_list
df
输出:
col1 col2 col3 CV
0 100 99 101 1%
1 198 200 202 1%
2 495 500 505 1%
3 600 594 606 1%
4 50 100 150 50%
但我想知道 Pandas 是否有一个内置的函数(到目前为止我找不到)。
解决方法
您可以通过指定 axis=1
对整行进行操作。所以得到一系列标准偏差和平均值(对于每一行)并除以。
df['CV'] = df.std(axis=1,ddof=1)/df.mean(axis=1)*100
col1 col2 col3 CV
0 100 99 101 1.0
1 198 200 202 1.0
2 495 500 505 1.0
3 600 594 606 1.0
4 50 100 150 50.0