我想重塑以下数据框:
索引编号 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
这实际上与您正在执行的操作非常相似,只是用代替了循环apply
。该pd.Series(x.values)
有它默认的范围在开始的整数索引0
。索引值成为列名(上方)。各个组的长度可以不同也没关系。该apply
方法为您对齐各种索引(并使用填充缺少的值NaN
)。多么方便!
我在这里学到了这个技巧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句