如何对Pandas DataFrame所有列的数组计算RMS、计数、求和并生成新DataFrame
批量计算Pandas DataFrame列内数组的RMS、Count与SUM
核心思路
利用Pandas的applymap方法对DataFrame中每个元素(即各列内的数组)批量应用计算函数,自动适配任意数量的列(包括300+列的场景),最终生成三个独立的结果DataFrame。
完整代码实现
1. 模拟原始数据(可替换为你的实际DataFrame)
import pandas as pd import numpy as np # 构造包含数组元素的多列DataFrame(示例仅2列,实际可支持任意数量) raw_data = { 'Sensor_A': [np.array([1.2, 3.4, 5.6]), np.array([7.8]), np.array([9.0, 2.1])], 'Sensor_B': [np.array([4.3, 6.7, 8.9, 1.0]), np.array([2.3, 5.4]), np.array([7.6])], # 可继续添加更多列... } df_raw = pd.DataFrame(raw_data)
2. 定义计算函数
# 计算均方根(RMS) def compute_rms(arr): return np.sqrt(np.mean(arr ** 2)) # 计算数组元素数量 def compute_count(arr): return len(arr) # 计算数组元素求和 def compute_sum(arr): return arr.sum()
3. 生成结果DataFrame
# 对所有列的每个数组元素批量计算,生成三个结果DataFrame Dataframe_RMS = df_raw.applymap(compute_rms) Dataframe_Count = df_raw.applymap(compute_count) Dataframe_SUM = df_raw.applymap(compute_sum)
结果示例
以示例中的df_raw为例,各结果DataFrame的输出如下:
Dataframe_Count(元素数量)
Sensor_A Sensor_B 0 3 4 1 1 2 2 2 1
Dataframe_SUM(求和)
Sensor_A Sensor_B 0 10.2 20.9 1 7.8 7.7 2 11.1 7.6
Dataframe_RMS(均方根)
Sensor_A Sensor_B 0 3.957272 4.923810 1 7.800000 4.104875 2 5.746299 7.600000
扩展:处理含NaN的数组
如果你的数组中存在缺失值(NaN),可以修改计算函数以忽略NaN:
def compute_rms_with_nan(arr): return np.sqrt(np.nanmean(arr ** 2)) def compute_count_with_nan(arr): return np.count_nonzero(~np.isnan(arr)) def compute_sum_with_nan(arr): return np.nansum(arr) # 生成处理NaN后的结果 Dataframe_RMS_NaN = df_raw.applymap(compute_rms_with_nan) Dataframe_Count_NaN = df_raw.applymap(compute_count_with_nan) Dataframe_SUM_NaN = df_raw.applymap(compute_sum_with_nan)
内容的提问来源于stack exchange,提问作者Mohamed Elhefnawy
相关产品推荐
相关产品推荐

