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
相关产品推荐
相关产品推荐

