Pandas:所有可能的行组合
Posted
技术标签:
【中文标题】Pandas:所有可能的行组合【英文标题】:Pandas: all possible combinations of rows 【发布时间】:2019-02-13 01:59:54 【问题描述】:我的 DataFrame 看起来像..
ID c1 c2 cX
r1 2 3 ..
r2 8 9 ..
rY ..
我想生成一个新的 DataFrame,其中包含所有可能的(两部分)行组合,同时连接两个组合行的列(这样新的 DF 将有两倍的列)。结果应如下所示:
ID c1_r1 c1_r2 c2_r1 c2_r2 cX_rA
r1_r2 2 8 3 9 ..
r1_r3 .. .. .. ..
rA_rB ..
ID 名称不重要(它甚至可以是 MultiIndex),重要的列的顺序也不重要。
如何解决这个问题?
【问题讨论】:
我了解您试图提供一个最小的示例,但这似乎过于简约。你能发布一个实际的df
和最终结果吗?因为我很困惑,例如,单元格 c1_r1
和 r1_r3
中的值应该是什么
【参考方案1】:
考虑df
c1 c2
ID
r1 2 3
r2 8 9
r3 0 7
我会这样做
from itertools import combinations
a, b = map(list, zip(*combinations(df.index, 2)))
print(a, b, sep='\n')
['r1', 'r1', 'r2']
['r2', 'r3', 'r3']
然后使用pd.concat
d = pd.concat(
[df.loc[a].reset_index(), df.loc[b].reset_index()],
keys=['a', 'b'], axis=1
)
d
a b
ID c1 c2 ID c1 c2
0 r1 2 3 r2 8 9
1 r1 2 3 r3 0 7
2 r2 8 9 r3 0 7
最后,把松散的部分收起来
d.set_index([('a', 'ID'), ('b', 'ID')]).rename_axis(['a', 'b'])
a b
c1 c2 c1 c2
a b
r1 r2 2 3 8 9
r3 2 3 0 7
r2 r3 8 9 0 7
【讨论】:
以上是关于Pandas:所有可能的行组合的主要内容,如果未能解决你的问题,请参考以下文章
R如何排列数据帧的所有行,以便在列表中返回所有可能的行组合?
如何组合 pandas df 以便可以合并具有置换 col1 和 col2 值的行,其中仅包含一个组合并汇总计数列