gpt4 book ai didi

python - 在 Pandas 中创建列对

转载 作者:行者123 更新时间:2023-11-28 22:25:15 24 4
gpt4 key购买 nike

df=pd.DataFrame(np.random.randn(4,4), columns=['a','b','c','d'])

a b c d
0 1.23 -1.25 0.15 1.41
1 0.64 -0.16 0.46 -1.06
2 -0.98 0.54 -0.81 0.33
3 1.71 0.95 1.01 -0.81

如何创建包含所有可能的列对的数据框?

p1  p2    c1     c2
a b 1.23 -1.25
a b 0.64 -0.16
a b -0.98 0.54
a b 1.71 0.95
a c 1.23 0.15
a c 0.64 0.46
a c -0.98 -0.81
a c 1.71 1.01
... ... ... ...
c d 0.15 1.41
c d 0.46 -1.06
c d -0.81 0.33
c d 1.01 -0.81

最佳答案

使用:

  • 通过 itertools 获取列的所有组合:
  • 通过列表理解和重命名列获取所有组合的列表:(df[[x[0], x[1]]] 用于第一对 df[['a', 'b']])
  • concat带有参数 keys for Multiindex
  • 最后一些数据清理 - 删除第 3 级,新列名

from  itertools import combinations
cc = list(combinations(df.columns,2))

dfs = [df[[x[0], x[1]]].rename(columns={x[0]:'c1', x[1]:'c2'}) for x in cc]
df1 = pd.concat(dfs, keys=cc)
df1 = df1.reset_index(level=2, drop=True).rename_axis(('p1','p2')).reset_index()
print (df1)
p1 p2 c1 c2
0 a b 1.23 -1.25
1 a b 0.64 -0.16
2 a b -0.98 0.54
3 a b 1.71 0.95
4 a c 1.23 0.15
5 a c 0.64 0.46
6 a c -0.98 -0.81
7 a c 1.71 1.01
8 a d 1.23 1.41
9 a d 0.64 -1.06
10 a d -0.98 0.33
11 a d 1.71 -0.81
12 b c -1.25 0.15
13 b c -0.16 0.46
14 b c 0.54 -0.81
15 b c 0.95 1.01
16 b d -1.25 1.41
17 b d -0.16 -1.06
18 b d 0.54 0.33
19 b d 0.95 -0.81
20 c d 0.15 1.41
21 c d 0.46 -1.06
22 c d -0.81 0.33
23 c d 1.01 -0.81

关于python - 在 Pandas 中创建列对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45638822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com