情况1: 如果两个DataFrame都有一个共同的列(不是索引),你可以使用merge或join来整合它们。
import pandas as pd # 创建两个示例DataFrame
df1 = pd.DataFrame({ 'ID': ['001', '002', '003'], 'A': ['foo', 'bar', 'baz']
}) df2 = pd.DataFrame({ 'ID': ['001', '002', '003'], 'B': ['one', 'two', 'three']
}) # 使用merge按ID列整合两个DataFrame
merged_df = pd.merge(df1, df2, on='ID', how='inner') print(merged_df)
输出:
ID A B
0 001 foo one
1 002 bar two
2 003 baz three
情况2: 如果两个DataFrame的索引相同,你可以使用concat来将它们堆叠在一起。
# 假设两个DataFrame的索引相同
df1 = pd.DataFrame({ 'A': ['foo', 'bar', 'baz']
}, index=['001', '002', '003']) df2 = pd.DataFrame({ 'B': ['one', 'two', 'three']
}, index=['001', '002', '003']) # 使用concat按索引整合两个DataFrame
concat_df = pd.concat([df1, df2], axis=1) print(concat_df)
输出:
A B
001 foo one
002 bar two
003 baz three
情况3: 当使用pandas的merge函数时,如果两个DataFrame中的列名不匹配,你需要明确地指定哪些列应该被用作合并的键。这可以通过left_on和right_on参数来实现,这两个参数分别指定左侧DataFrame和右侧DataFrame中用作合并键的列名。
import pandas as pd # 创建两个示例DataFrame,其中列名不匹配
df1 = pd.DataFrame({ 'ID_num': [1, 2, 3], 'Value_A': ['A1', 'A2', 'A3']
}) df2 = pd.DataFrame({ 'ID_str': ['1', '2', '3'], 'Value_B': ['B1', 'B2', 'B3']
}) # 使用merge按ID列(尽管列名不同)整合两个DataFrame
# 指定left_on和right_on参数来匹配列
merged_df = pd.merge(df1, df2, left_on='ID_num', right_on='ID_str', how='inner') print(merged_df)
输出:
ID_num Value_A ID_str Value_B
0 1 A1 1 B1
1 2 A2 2 B2
2 3 A3 3 B3
在这个例子中,尽管df1中的ID_num列是整数类型,而df2中的ID_str列是字符串类型,但我们仍然可以通过left_on和right_on参数将它们作为合并键。how='inner’表示只保留两个DataFrame中都有匹配ID的行。
如果合并后你想要保留原始的列名,可以使用left_index=False和right_index=False参数,并可能需要在合并后重命名列。例如:
# 合并并重命名列以匹配原始列名
merged_df = merged_df.rename(columns={'ID_num': 'ID', 'ID_str': 'ID'}) print(merged_df)
输出:
ID Value_A Value_B
0 1 A1 B1
1 2 A2 B2
2 3 A3 B3