跨pandas 数据框所有列的数学运算,无论其大小如何

问题描述

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