如何计算Pandas DataFrame每行水平偏移的两类指标
解决Pandas偏移行的两类指标计算问题
先还原你的DataFrame:
| Heading 1 | Heading 2 | Unnamed: 1 | Unnamed: 2 |
|---|---|---|---|
| NaN | 34 | 24 | NaN |
| 5 | NaN | NaN | NaN |
| NaN | NaN | 13 | 77 |
| NaN | NaN | NaN | 18 |
直接用以下代码就能算出你要的两个指标:
步骤1:构造DataFrame(已有可跳过)
import pandas as pd import numpy as np df = pd.DataFrame({ 'Heading 1': [np.nan, 5, np.nan, np.nan], 'Heading 2': [34, np.nan, np.nan, np.nan], 'Unnamed: 1': [24, np.nan, 13, np.nan], 'Unnamed: 2': [np.nan, np.nan, 77, 18] })
步骤2:计算两类指标
# 计算Spill over:Unnamed列的非NaN值数量 df['Spill over'] = df.filter(regex='Unnamed:.*').notna().sum(axis=1) # 计算原始列的NaN值数量 df['原始列NaN数量'] = df[['Heading 1', 'Heading 2']].isna().sum(axis=1)
最终结果
运行后DataFrame会新增目标列,结果如下:
| Heading 1 | Heading 2 | Unnamed: 1 | Unnamed: 2 | Spill over | 原始列NaN数量 |
|---|---|---|---|---|---|
| NaN | 34 | 24 | NaN | 1 | 1 |
| 5 | NaN | NaN | NaN | 0 | 0 |
| NaN | NaN | 13 | 77 | 2 | 2 |
| NaN | NaN | NaN | 18 | 1 | 2 |
简单原理:
filter(regex='Unnamed:.*')精准筛选所有Unnamed开头的列,notna()将非NaN值转为布尔值True(对应数值1),sum(axis=1)按行求和得到每行的非NaN数量。- 直接指定原始列列表,
isna()将NaN值转为布尔值True(对应数值1),sum(axis=1)按行求和得到每行的NaN数量。
内容的提问来源于stack exchange,提问作者lowkey
相关产品推荐
相关产品推荐

