【发布时间】:2016-02-20 02:12:26
【问题描述】:
我在使用 Postgres SQL 时遇到过类似的问题,但我认为这种任务在 Postgres 中确实很难完成,我认为 python/pandas 会使这变得容易得多,尽管我仍然想不出来解决方案。
我现在有一个看起来像这样的 Pandas 数据框:
df={'planid' : ['A', 'A', 'B', 'B', 'C', 'C'],
'x' : ['a1', 'a2', 'b1', 'b2', 'c1', 'c2']}
df=pd.DataFrame(df)
df
planid x
0 A a1
1 A a2
2 B b1
3 B b2
4 C c1
5 C c2
我想获得所有可能的排列,其中planid 彼此不相等。换句话说,将planid 中的每个值视为一个“桶”,如果我要从x 从每个值中提取值,我想要所有可能的组合
planid 中的“桶”。在这个特定示例中,共有 8 个排列 {(a1, b1, c1), (a1, b2, c1), (a1, b1, c2), (a1, b2, c2), (a2, b1, c1) , (a2, b2, c1), (a2, b1, c2), (a2, b2, c2)}。
但是,我希望生成的数据框为三列,planid、x 和另一列,可能名为 permutation_counter。最终的数据帧具有标记为permutation_counter 的所有不同排列。换句话说,我希望我的最终数据框看起来像
planid x permutation_counter
0 A a1 1
1 B b1 1
2 C c1 1
3 A a1 2
4 B b2 2
5 C c1 2
6 A a1 3
7 B b1 3
8 C c2 3
9 A a1 4
10 B b2 4
11 C c2 4
12 A a2 5
13 B b1 5
14 C c1 5
15 A a2 6
16 B b2 6
17 C c1 6
18 A a2 7
19 B b1 7
20 C c2 7
21 A a2 8
22 B b2 8
23 C c2 8
任何帮助将不胜感激!
【问题讨论】:
标签: python pandas permutation