重塑熊猫数据框(一个复杂的案例!)

时间:2015-06-12 21:21:06

标签: python-2.7 numpy pandas

我想重塑以下数据框:

index   id     numbers
1111    5      58.99
2222    5      75.65
1000    4      66.54 
11      4      60.33
143     4      62.31
145     51     30.2
1       7      61.28

重新塑造的数据框应如下所示:

id   1       2        3 
5    58.99   75.65    nan
4    66.54   60.33    62.31
51   30.2    nan      nan
7    61.28   nan      nan

我使用以下代码执行此操作。

import pandas as pd
dtFrame = pd.read_csv("data.csv")
ids = dtFrame['id'].unique()
temp = dtFrame.groupby(['id'])
temp2 = {}
for i in ids:
    temp2[i]= temp.get_group(i).reset_index()['numbers'] 
dtFrame = pd.DataFrame.from_dict(temp2)
dtFrame = dtFrame.T

虽然上面的代码解决了我的问题,但有一种更简单的方法来实现这一点。我尝试了Pivot表,但它没有解决问题,也许它需要在每个组中具有相同数量的元素。或者可能有另一种我不知道的方式,请分享您的想法。

1 个答案:

答案 0 :(得分:2)

In [69]: df.groupby(df['id'])['numbers'].apply(lambda x: pd.Series(x.values)).unstack()
Out[69]: 
        0      1      2
id                     
4   66.54  60.33  62.31
5   58.99  75.65    NaN
7   61.28    NaN    NaN
51  30.20    NaN    NaN

这与你正在做的非常相似,只是循环被apply取代。 pd.Series(x.values)有一个索引,默认情况下的范围是从0开始的整数。索引值成为列名(上图)。各种群体可能具有不同的长度并不重要。 apply方法为您排列各种索引(并使用NaN填充缺失值)。多么方便!

我学会了这个技巧here