2017-10-16 189 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 

現在你可以從這個例子中即興解決你的問題。希望這可以幫助。