2015-06-14 198 views
0

我正在处理汇总数据,为了进一步处理它,需要对其进行分解。原始的df包含一个值'no。每排学生的,我需要一排新的DF每名学生:熊猫:从其他数据帧信息创建数据帧行

原DF:

   faculty A faculty B faculty x 
male students   2   7  ... 
female students   4   3  ... 

新的df:

No.   gender faculty ... 
1    m  A 
2    m  A 
3    f  A 

和等等。原来的DF包含更多的信息(如国籍和地区信息),但可以用与性别相同的方式处理。 很明显,我会先转换(df.T),但随后乐趣就开始了。 ..我很初学,任何指针都会很受欢迎。

回答

0

我想 “解聚” 的最简单的方法中的数据是使用一个发电机表达 简单地列举了所有需要的行:

(key for key, val in series.iteritems() for i in range(val)) 

import pandas as pd 

df = pd.DataFrame({'faculty A': [2,4], 'faculty B':[7,3]}, 
        index=['male students', 'female students']) 
df.columns = [re.sub(r'faculty ', '', col) for col in df.columns] 
df.index = ['m', 'f'] 
series = df.stack() 
df = pd.DataFrame(
    (key for key, val in series.iteritems() for i in range(val)), 
    columns=['gender','faculty']) 

产量

gender faculty 
0  m  A 
1  m  A 
2  m  B 
3  m  B 
4  m  B 
5  m  B 
6  m  B 
7  m  B 
8  m  B 
9  f  A 
10  f  A 
11  f  A 
12  f  A 
13  f  B 
14  f  B 
15  f  B 

PS。以上显示可以“分解”数据,但您确定要这样做吗?分解似乎相当低效。如果 的一个值是一百万,那么你最终会得到一百万重复 行...

而是分列的,你可能会更好找对汇总数据进行计算的一种方式。

+0

谢谢你,为我工作。我不确定分散聚合是否是这里的正确步骤,但它最终应该允许我与另一个“聚合”数据集进行交叉参考。当然,你对“巨大”的价值观是正确的。 –