当 Python 中有多列时,如何找出 Dataframe 中两列的组合?
How to find out combination of two columns in Dataframe when there is multiple columns in Python?
我有这样的数据框,
df = pd.DataFrame({'a':[1,2,3,3,4,4,4], 'b':[2,3,4,4,5,5,5], 'c':[5,6,7,8,5,5,5]})
我想生成一个包含两列组合的新数据框。
例如,我想找出 ( a,b a,c a,d b,c b,d c,d )
的组合
我尝试使用此代码
col_a_list = df['a'].tolist()
col_b_list = df['b'].tolist()
col_c_list = df['c'].tolist()
import itertools
def cartesian_product(lists):
return list(itertools.product(*lists))
ls = [col_a_list,col_b_list,col_c_list,col_d_list]
print("Original Lists:",ls)
print("Cartesian product of the said lists: ",cartesian_product(ls))
然而,它不起作用。这会生成三列的组合,而不是两列。
我想要这样的输出,
column x column y
1 2
1 5
1 3
1 6
1 4
1 7
.
.
.
.
有什么方法可以生成这些列吗?
提前致谢!
我相信你需要:
df = pd.DataFrame({'a':[1,2,3,3,4,4,4], 'b':[2,3,4,4,5,5,5],
'c':[5,6,7,8,5,5,5], 'd':[5,6,7,8,5,5,5]})
import itertools
def comb(df):
return [df.loc[:, list(x)].set_axis(['column x','column y'], axis=1)
for x in itertools.combinations(df.columns, 2)]
df1 = pd.concat(comb(df)).sort_index(kind='mergesort').reset_index(drop=True)
print(df1.head(10))
column x column y
0 1 2
1 1 5
2 1 5
3 2 5
4 2 5
5 5 5
6 2 3
7 2 6
8 2 6
9 3 6
我有这样的数据框,
df = pd.DataFrame({'a':[1,2,3,3,4,4,4], 'b':[2,3,4,4,5,5,5], 'c':[5,6,7,8,5,5,5]})
我想生成一个包含两列组合的新数据框。 例如,我想找出 ( a,b a,c a,d b,c b,d c,d )
的组合我尝试使用此代码
col_a_list = df['a'].tolist()
col_b_list = df['b'].tolist()
col_c_list = df['c'].tolist()
import itertools
def cartesian_product(lists):
return list(itertools.product(*lists))
ls = [col_a_list,col_b_list,col_c_list,col_d_list]
print("Original Lists:",ls)
print("Cartesian product of the said lists: ",cartesian_product(ls))
然而,它不起作用。这会生成三列的组合,而不是两列。
我想要这样的输出,
column x column y
1 2
1 5
1 3
1 6
1 4
1 7
.
.
.
.
有什么方法可以生成这些列吗? 提前致谢!
我相信你需要:
df = pd.DataFrame({'a':[1,2,3,3,4,4,4], 'b':[2,3,4,4,5,5,5],
'c':[5,6,7,8,5,5,5], 'd':[5,6,7,8,5,5,5]})
import itertools
def comb(df):
return [df.loc[:, list(x)].set_axis(['column x','column y'], axis=1)
for x in itertools.combinations(df.columns, 2)]
df1 = pd.concat(comb(df)).sort_index(kind='mergesort').reset_index(drop=True)
print(df1.head(10))
column x column y
0 1 2
1 1 5
2 1 5
3 2 5
4 2 5
5 5 5
6 2 3
7 2 6
8 2 6
9 3 6