2017-10-16 86 views
2

我有一个数据帧,如下图所示..转换特定列基于条件的大熊猫行

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 

我已经表明它仅适用于输入的第一行。我需要输入数据帧的所有行。

请帮我解决这个问题

+0

a和b突然从哪里来? –

+0

这些只是列标题名称..您可以使用任何名称... – amrutha

回答

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"]) 
+0

但是,如果我想为所有行的输入?上面的代码只适用于第一行 – amrutha

+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 

现在你可以从这个例子中即兴解决你的问题。希望这可以帮助。