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

Pyspark中按ID拆分DataFrame并分离字符串、数值类型数据的实现

实现代码(Pandas)

你可以直接按照下方代码实现,全程不会修改原始值的类型:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ID': ['B', 'B', 'A', 'A', 'D', 'D', 'C', 'C'],
    'string_value': ['On', 'Off', 'Inactive', 'Active', 'NULL', 'NULL', 'NULL', 'NULL'],
    'numeric_value': ['NULL', 'NULL', 'NULL', 'NULL', 450, 431, 20, 30],
    'timestamp': [1632733508, 1632733508, 1632733511, 1632733512, 1632733513, 1632733515, 1632733518, 1632733521]
})

# 存储每个ID处理后的结果,key为ID,value为处理后的DataFrame
result = {}

# 按ID分组遍历
for id_val, group_df in df.groupby('ID'):
    # 删除全为"NULL"的列
    processed_df = group_df.loc[:, (group_df != 'NULL').any(axis=0)].copy()
    # 找到值列(排除ID和timestamp的列)
    value_col = [col for col in processed_df.columns if col not in ['ID', 'timestamp']][0]
    # 重命名值列为ID名,删除ID列
    processed_df = processed_df.rename(columns={value_col: id_val}).drop(columns=['ID'])
    # 存入结果
    result[id_val] = processed_df

# 测试输出结果
print("ID为B的处理结果:")
print(result['B'])
print("\nID为D的处理结果:")
print(result['D'])

运行输出示例

ID为B的处理结果:
     B   timestamp
0   On  1632733508
1  Off  1632733508

ID为D的处理结果:
     D   timestamp
4  450  1632733513
5  431  1632733515

类型保留说明

代码仅做了列过滤、重命名、删除列操作,没有对列的值做任何转换处理,原始列的字符串、数值类型会完整保留,符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:36:04