如何将DataFrame的行/单元格复制到新DataFrame?附实现示例
Pandas:复制DataFrame行/单元格到新DataFrame及示例实现
一、基础操作:复制行/单元格到新DataFrame
1. 复制整行到新DataFrame
若要复制df_a中指定索引的行到df_b,推荐使用concat(适配pandas新版本):
import pandas as pd # 示例:复制df_a第0行到df_b row_to_copy = df_a.loc[[0]] # 双层方括号保持DataFrame格式 df_b = pd.concat([df_b, row_to_copy], ignore_index=True)
旧版本兼容可使用append(新版本已弃用):
row_to_copy = df_a.loc[0] df_b = df_b.append(row_to_copy, ignore_index=True)
2. 复制单个单元格到新DataFrame
直接获取指定单元格值后赋值给新DataFrame对应位置:
# 获取df_a中索引0、列'attrb1'的单元格值 cell_value = df_a.at[0, 'attrb1'] # 赋值给df_b第0行的'value1'列 df_b.at[0, 'value1'] = cell_value
二、针对你的示例场景实现
根据你提供的数据集和目标输出,完整实现代码如下:
1. 定义示例数据
import pandas as pd # 构造df__data df__data = pd.DataFrame({ 'key1': ['sfdg', 'afrtf'], 'key2': ['dagd', 'yxcbb'], 'key3': ['dgsg', 'ertet'], 'attrb1': [12, 34], 'attrb2': [43, 45], 'attrb3': [24, 34] }) # 构造df__attributes_to_compare df__attributes_to_compare = pd.DataFrame({ 'info_a': ['attrb1', 'attrb1'], 'info_b': ['attrb2', 'attrb3'] })
2. 实现匹配逻辑并生成new_df
# 初始化空结果DataFrame new_df = pd.DataFrame(columns=['key1', 'key2', 'key3', 'value1', 'value2']) # 遍历主数据的每一行 for index, row in df__data.iterrows(): # 提取当前行的key列数据 key_data = row[['key1', 'key2', 'key3']].to_dict() # 遍历每一组需要对比的属性对 for _, compare_row in df__attributes_to_compare.iterrows(): col_a = compare_row['info_a'] col_b = compare_row['info_b'] # 当属性值不匹配时,添加到结果表 if row[col_a] != row[col_b]: new_record = { **key_data, 'value1': row[col_a], 'value2': row[col_b] } new_df = pd.concat([new_df, pd.DataFrame([new_record])], ignore_index=True)
最终输出结果
| key1 | key2 | key3 | value1 | value2 |
|---|---|---|---|---|
| sfdg | dagd | dgsg | 12 | 43 |
| sfdg | dagd | dgsg | 12 | 24 |
| afrtf | yxcbb | ertet | 34 | 45 |
内容的提问来源于stack exchange,提问作者di1a
相关产品推荐
相关产品推荐

