根据条件pandas

时间:2017-10-16 08:48:51

标签: python-3.x

我有一个如下所示的数据框..

E     F     G     H     I     J
U902E U902F U902G U902H U902I U902J
U997E U997F U997G U997H U997I U997J

我想要以下结果: 对于每个列值,我必须将所有相应的列放在行(转置)中,除了选定的列值,即:

A     B
U902E U902F
U902E U902G
U902E U902H
U902E U902I
U902E U902J
U902F U902E
U902F U902G
U902F U902H
U902F U902I
U902F U902J
U902G U902E
U902G U902F
U902G U902H
U902G U902I
U902G U902J
U902H U902E
U902H U902F
U902H U902G
U902H U902I
U902H U902J
U902I U902E
U902I U902F
U902I U902G
U902I U902H
U902I U902J
U902J U902E
U902J U902F
U902J U902G
U902J U902H
U902J U902I

我只针对第一行输入显示了它。我希望它适用于输入数据帧的所有行。

请帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

此处的关键字是排列,它是itertools

的一部分
import pandas as pd
from itertools import permutations
permuts = list(permutations(df.iloc[0], 2))
new_df = pd.DataFrame(permuts, columns=["A","B"])

答案 1 :(得分:0)

您可以使用,学习和即兴创作来自@JanZeiseweis的示例(使用itertools模块)。 combinationspermutations在处理数据时非常有用。

另一种方法,您也可以使用循环,如下例所示:

df = pandas.DataFrame(data={'Num':['1','2','3'], 'Let':['a','b','c']});

然后我们将df作为

    Let Num
0   a   1
1   b   2
2   c   3

现在只占第一列(在你的行中)。

L=df['Let']

L

0    a
1    b
2    c
Name: Let, dtype: object

由于你想要的输出有简单模式,你可以迭代地采用,如下图所示:

for i in L.index:
    for j in L.index:
        if i != j:
            print(str(L[i])+' '+str(L[j]));

此示例的结果:

a b
a c
b a
b c
c a
c b

现在您可以通过此示例即兴发挥以解决您的问题。希望这会有所帮助。