You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言Dataframe子集化:剔除某国家所有分组下全缺失的变量列

问题描述

现有如下DataFrame:

countrysectordata1data2
France17.
France210.
belgium1127
belgium2148

需要对其进行子集化操作:剔除任意一个国家的所有sector分组下均为缺失值的列。本例中data2列在法国的所有sector分组下全为缺失(用"."表示),因此需整列剔除,最终输出如下:

countrysectordata1
France17
France210
belgium112
belgium214
解决方案(Pandas实现)

步骤说明:

  1. 将数据中的缺失标记(".")替换为Pandas可识别的pd.NA;
  2. 按country分组,检查每个数据列在各分组内是否全部缺失;
  3. 筛选出存在至少一个国家全缺失的列;
  4. 从原DataFrame中剔除这些列。

代码实现:

import pandas as pd

# 构造原始DataFrame
data = {
    'country': ['France', 'France', 'belgium', 'belgium'],
    'sector': [1, 2, 1, 2],
    'data1': [7, 10, 12, 14],
    'data2': ['.', '.', 7, 8]
}
df = pd.DataFrame(data)

# 替换缺失标记为pd.NA
df.replace('.', pd.NA, inplace=True)

# 按country分组,检查各数据列是否在分组内全缺失
group_missing = df.groupby('country').apply(lambda x: x.drop(['country', 'sector'], axis=1).isna().all())

# 找出需要删除的列:至少一个国家全缺失的列
cols_to_drop = group_missing.any()[group_missing.any()].index.tolist()

# 剔除目标列
df_cleaned = df.drop(cols_to_drop, axis=1)

# 查看结果
print(df_cleaned)

运行结果:

country  sector  data1
0   France       1      7
1   France       2     10
2  belgium       1     12
3  belgium       2     14

内容的提问来源于stack exchange,提问作者StephenB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:25:21