交叉连接在Pandas中的一般称呼是笛卡尔积。笛卡尔积是指将两个数据集的每个元素组合成一个新的数据集。Pandas提供了一个函数,可以快速且简单地进行笛卡尔积操作:pandas.DataFrame.merge()
。
下面演示一下如何在Pandas中执行交叉连接的Python程序:
首先,我们需要导入 Pandas 包。接着,我们需要创建两个数据集 df1 和 df2。这里我们先简单生成两个 DataFrame,前者有一列名为 key,后者有一列 name:
import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': range(4)})
df2 = pd.DataFrame({'name': ['Micky', 'Tom', 'Lucy'], 'age': [11, 12, 13]})
仅根据上面两个数据集进行 merge,会发现没有可用于连接的列,因此 merge 结果会是所有列的笛卡尔积:
df3 = pd.merge(df1, df2)
print(df3)
结果为:
key value name age
0 A 0 Micky 11
1 A 0 Tom 12
2 A 0 Lucy 13
3 B 1 Micky 11
4 B 1 Tom 12
5 B 1 Lucy 13
6 C 2 Micky 11
7 C 2 Tom 12
8 C 2 Lucy 13
9 D 3 Micky 11
10 D 3 Tom 12
11 D 3 Lucy 13
可以看到,df3 是一个包含了所有可能行的笛卡尔积结果的 DataFrame。
df1 和 df2 中都有 key 列,我们可以将其作为 left_on 和 right_on 参数使用。这些参数确定哪些列用于连接。由于使用了同名的作为连接列,所以 merge 将自动调用这些列:
df4 = pd.merge(df1, df2, on='key')
print(df4)
结果为:
key value name age
0 A 0 Micky 11
1 B 1 Tom 12
2 C 2 Lucy 13
3 D 3 Micky 11
现在,merge 函数的执行结果与 df1 和 df2 中的共同标识列(“key”)有关。
如果您不想保留这些列,可以删除它们:
df5 = pd.merge(df1, df2, on='key').drop('key', axis=1)
print(df5)
结果为:
value name age
0 0 Micky 11
1 1 Tom 12
2 2 Lucy 13
3 3 Micky 11
以上就是在Pandas中执行交叉连接的Python程序的完整攻略,希望可以对你有所帮助。
本文链接:http://task.lmcjl.com/news/17240.html