Python 2.7 重塑熊猫数据帧(一个复杂的情况!)

Python 2.7 重塑熊猫数据帧(一个复杂的情况!),python-2.7,numpy,pandas,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 虽然上面的代码解决了我的问题,但有没有更简单的方法来实现这一点。我尝试了Pivot表,但它并没有解决这个问题,可能它需要在每个组中有相同数

我想重塑以下数据帧:

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

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
填充缺少的值)。多方便啊

我学会了这个把戏

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
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