2016-03-03 159 views
1

我在Windows 10機器上使用Python 2.7和Pandas。將N個數據幀轉換爲3個列數據幀

我有由n個Dataframe其中的n:

1)的索引表示人民名

2)列標題是按照相同的順序

3)每個小區的相同人民名Dataframe是他們每天互相發送電子郵件的平均次數。

如何將變換DataframeDataframe與3列,其中:

1)第1列將是n的索引爲n Dataframe

2)第2欄將是行標題用n在n Dataframe

3)第3列是由n個對應於從n的索引,列標題組合這兩個名字的單元格的值Dataframe

編輯

適用於不提供我正在尋找的示例。我想從下面的代碼中將df1轉化爲rel_df。

import pandas as pd 
from itertools import permutations 
df1 = pd.DataFrame() 
df1['index'] = ['a', 'b','c','d','e'] 
df1.set_index('index', inplace = True) 
df1['a'] = [0,1,2,3,4] 
df1['b'] = [1,0,2,3,4] 
df1['c'] = [4,1,0,3,4] 
df1['d'] = [5,1,2,0,4] 
df1['e'] = [7,1,2,3,0] 

##df of all relationships to build 
flds = pd.Series(SO_df.fld1.unique()) 
flds = pd.Series(flds.append(pd.Series(SO_df.fld2.unique())).unique()) 

combos = [] 
for L in range(0, len(flds)+1): 
    for subset in permutations(flds, L): 
     if len(subset) == 2: 
      combos.append(subset) 
     if len(subset) > 2: 
      break 

rel_df = pd.DataFrame.from_records(data = combos, columns = ['fld1','fld2']) 
rel_df['value'] = [1,4,5,7,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4] 

print df1 
>>> print df1 
     a b c d e 
index    
a  0 1 4 5 7 
b  1 0 1 1 1 
c  2 2 0 2 2 
d  3 3 3 0 3 
e  4 4 4 4 0 

>>> print rel_df 
    fld1 fld2 value 
0  a b  1 
1  a c  4 
2  a d  5 
3  a e  7 
4  b a  1 
5  b c  1 
6  b d  1 
7  b e  1 
8  c a  2 
9  c b  2 
10 c d  2 
11 c e  2 
12 d a  3 
13 d b  3 
14 d c  3 
15 d e  3 
16 e a  4 
17 e b  4 
18 e c  4 
19 e d  4 
+1

請提供一個帶有3-5行和預期輸出的樣本輸入數據集 – MaxU

回答

2

使用melt

df1 = df1.reset_index() 
pd.melt(df1, id_vars='index', value_vars=df1.columns.tolist()[1:]) 

(如果你的實際代碼你明確地設定指標,你在這裏做的,只是跳過這一步,而不是做reset_index; melt不起作用)

+0

我使用這個解決方案是因爲使用了熔體只是一行代碼。 @Alexander您的解決方案也適用。我給了你一個+1。謝謝大家! – BeeGee

2
# Flatten your dataframe. 
df = df1.stack().reset_index() 

# Remove duplicates (e.g. fld1 = 'a' and fld2 = 'a'). 
df = df.loc[df.iloc[:, 0] != df.iloc[:, 1]] 

# Rename columns. 
df.columns = ['fld1', 'fld2', 'value'] 

>>> df 
    fld1 fld2 value 
1  a b  1 
2  a c  4 
3  a d  5 
4  a e  7 
5  b a  1 
7  b c  1 
8  b d  1 
9  b e  1 
10 c a  2 
11 c b  2 
13 c d  2 
14 c e  2 
15 d a  3 
16 d b  3 
17 d c  3 
19 d e  3 
20 e a  4 
21 e b  4 
22 e c  4 
23 e d  4 
相關問題