如何用Pandas将特定行数据转换为目标列结构(Python)
解决方法
原始数据的value列是按固定顺序排列的结构化数据,我们可以先拆分出建筑列表、各国家对应的数据组,再通过组合生成目标DataFrame,具体步骤如下:
1. 提取并拆分原始数据
首先从原始DataFrame中提取有效数据(跳过第一行的"Building name"标记),然后拆分出建筑列表和各国家对应的尺寸数据:
import pandas as pd # 假设你的原始DataFrame名为df # 提取value列的有效数据,跳过第一个元素 values = df['value'].iloc[1:].tolist() # 拆分出3个建筑名称 buildings = values[:3] # 拆分各国家对应的尺寸数据 usa_sizes = values[4:7] brazil_sizes = values[8:11] france_sizes = values[12:15]
2. 组合生成目标数据结构
通过循环绑定,将每个建筑与对应的国家、尺寸数据进行组合,生成结果列表:
result_rows = [] # 按建筑顺序,依次绑定每个国家的对应尺寸 for building, us_size, br_size, fr_size in zip(buildings, usa_sizes, brazil_sizes, france_sizes): # 添加当前建筑对应USA的行 result_rows.append({ 'Building Name': building, 'Country Name': 'USA', 'Data Sizes': int(us_size) }) # 添加当前建筑对应Brazil的行 result_rows.append({ 'Building Name': building, 'Country Name': 'Brazil', 'Data Sizes': int(br_size) }) # 添加当前建筑对应France的行 result_rows.append({ 'Building Name': building, 'Country Name': 'France', 'Data Sizes': int(fr_size) }) # 转换为目标DataFrame result_df = pd.DataFrame(result_rows)
3. 最终结果
执行上述代码后,result_df的结构与你期望的完全一致:
Building Name Country Name Data Sizes 0 Empire State USA 20 1 Empire State Brazil 38 2 Empire State France 37 3 Petronas Tower USA 24 4 Petronas Tower Brazil 42 5 Petronas Tower France 43 6 Eiffel Tower USA 32 7 Eiffel Tower Brazil 87 8 Eiffel Tower France 18
内容的提问来源于stack exchange,提问作者vesuvius
相关产品推荐
相关产品推荐

