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

用户名

我想重塑以下数据框:

索引编号
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 in 
4 66.54 60.33 62.31 
51 30.2 in in 
7 61.28 in in

我使用下面的代码来做到这一点。

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

这实际上与您正在执行的操作非常相似,只是用代替了循环applypd.Series(x.values)有它默认的范围在开始的整数索引0索引值成为列名(上方)。各个组的长度可以不同也没关系。apply方法为您对齐各种索引(并使用填充缺少的值NaN)。多么方便!

在这里学到了这个技巧

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章