2016-03-03 157 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 
相关问题