Python 如何有效地将组合应用于数据帧?

Python 如何有效地将组合应用于数据帧?,python,pandas,numpy,Python,Pandas,Numpy,所以我已经用一个函数工作了一段时间,这个函数接受一个特定的df,它对它应用一个组合运算。基本上,它只需要一列,在该列中的值之间创建所有可能的对,同时复制每对中的信息 df=pd.DataFrame({'names':[“A”,“B”,“C”],“int:[0,1,2],“str:[“A”,“B”,“C”])) +-------+------+-----+ |名称| int | str| +-------+------+-----+ |A | 0 |“A”| |B | 1 |“B”| |C | 2

所以我已经用一个函数工作了一段时间,这个函数接受一个特定的df,它对它应用一个组合运算。基本上,它只需要一列,在该列中的值之间创建所有可能的对,同时复制每对中的信息

df=pd.DataFrame({'names':[“A”,“B”,“C”],“int:[0,1,2],“str:[“A”,“B”,“C”]))
+-------+------+-----+
|名称| int | str|
+-------+------+-----+
|A | 0 |“A”|
|B | 1 |“B”|
|C | 2 |“C”|
+-------+------+-----+
并将其转换为另一个df,形式如下:

+--------+--------+-------+-------+------+------+
| names1 | names2 | ints1 | ints2 | str1 | str2 |
+--------+--------+-------+-------+------+------+
| A      | B      |     0 |     1 | "a"  | "b"  |
| A      | C      |     0 |     2 | "a"  | "c"  |
| B      | C      |     1 |     2 | "b"  | "c"  |
+--------+--------+-------+-------+------+------+

这与itertools函数的操作相同。
我已经编写了一个函数,它在使用小型数据库时工作得很好(

输入:

  names  int str
0     A    0   a
1     B    1   b
2     C    2   c
方法:

import itertools

df = df.astype('str') # check all are string dtypes
# concat all items together
# I used a comma but use whatever separator is best for you
df['temp'] = df['names'] + ',' + df['int'] + ',' + df['str'] 

# calculate all combinations
new = pd.DataFrame([x for x in itertools.combinations(df.temp, 2)])
# combine into a single column (again use whatever delimitor is best)
new['temp'] = new[0] + ',' + new[1]

# split them apart into new columns
output = new['temp'].str.split(',', expand=True)
# rename columns
output.columns = ['names1', 'ints1', 'string1', 'names2', 'ints2', 'string2']
输出:

  names1 ints1 string1 names2 ints2 string2
0      A     0       a      B     1       b
1      A     0       a      C     2       c
2      B     1       b      C     2       c

你想把每一行转换成新的coolumn吗?当数据帧有5行时,输出是什么样子的(例如)?不,如果名称中有一个int=2和str=“C”的“C”。它也会将它们组合起来,比如“a”|“C”|“1”|“2”|“a·”|“C”和“b”的组合。新df中的列数不会改变。@jaimebw您能编辑您的问题以更清楚地显示这一点吗?@mullinsr done,希望它更清楚。您能发布您参考的当前解决方案吗。谢谢尝试,我会尝试应用您所做的,这是一个很好的方法。问题是我拥有的数据比示例中的一个(更多列和不同类型的数据类型)。您可以在之后再次转换数据类型。不要忘记使用不冲突的分隔符。