python - 列表与数据框的交叉连接(笛卡尔积)

标签 python pandas list cross-join

我有一个列表和一个数据框。

import pandas as pd
work_station = ['A','B','C']
name = ['Mike','Tom','Scott','Tracy']
salary = ['60000','50000','100000','90000']
df = pd.DataFrame({'name':name,'salary':salary})

我想将work_station和df交叉连接在一起,所以输出如下所示:

station     Name    salary
  A         Mike    60000
  A         Tom     50000
  A         Scott   100000
  A         Tracy   90000
  B         Mike    60000
  B         Tom     50000
  B         Scott   100000
  B         Tracy   90000
  C         Mike    60000
  C         Tom     50000
  C         Scott   100000
  C         Tracy   90000

我尝试使用 * 函数

df1 = work_station * salary 

但是它不起作用,因为

TypeError: can't multiply sequence by non-int of type 'list'

有什么建议吗?谢谢!

最佳答案

简单,将 concatkeys 参数一起使用:

(pd.concat([df] * len(work_station), keys=work_station)
   .reset_index(level=1, drop=True)
   .rename_axis('station')
   .reset_index()
)

   station   name  salary
0        A   Mike   60000
1        A    Tom   50000
2        A  Scott  100000
3        A  Tracy   90000
4        B   Mike   60000
5        B    Tom   50000
6        B  Scott  100000
7        B  Tracy   90000
8        C   Mike   60000
9        C    Tom   50000
10       C  Scott  100000
11       C  Tracy   90000

您还可以使用笛卡尔积进行合并路线:

(pd.DataFrame(work_station, columns=['station'])
  .assign(foo=1)
  .merge(df.assign(foo=1))
  .drop('foo', 1)
)

   station   name  salary
0        A   Mike   60000
1        A    Tom   50000
2        A  Scott  100000
3        A  Tracy   90000
4        B   Mike   60000
5        B    Tom   50000
6        B  Scott  100000
7        B  Tracy   90000
8        C   Mike   60000
9        C    Tom   50000
10       C  Scott  100000
11       C  Tracy   90000

关于python - 列表与数据框的交叉连接(笛卡尔积),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50960343/

相关文章:

python - 如何在 Jinja 模板中调用 Python 函数并使用函数值返回的字典?

python - 如何向数据行添加标题属性?

python - 根据其他行中其他列的匹配值更新列的 NULL 填充行

python - 在 Python 字典列表上实现 "select distinct ... from ..."

python - 如何使用 python 分割列表中的特定单词

python - 在不返回 HttpResponse 或使用 URL 的情况下使用 wkhtmltopdf 创建 PDF 文件的任何方法?我只想将 PDF 文件附加到电子邮件

python - 在 Pandas 中每 5 行选择前 2 行

python - 在python中有条件的列表中删除数字

java - 如何引用顺序计算列表中的重复值

r - 根据日期键对多个 R 列表的值求和