2024-04-29 16:56:50 发布
网友
使用Pandas,我在我的dataframe上调用了groupby,得到了以下结果:
>>>grouped = df.groupby(['cid']) for key, gr in grouped: print(key) print(gr) Out: cid price 121 12 121 10 121 9
我想让每个小组都像:
对熊猫来说,正确的方法是什么?在
下面是@DSM方法的一个快速变化,使用unstack()。我将借用@DSM的示例数据,以便于比较pivot()与unstack()的结果:
unstack()
pivot()
>>> df = pd.DataFrame({"cid": np.arange(64)//8, "price": np.arange(64)}) >>> df['num'] = df.groupby('cid').cumcount() >>> df.set_index(['cid','num']).unstack() price num 0 1 2 3 4 5 6 7 cid 0 0 1 2 3 4 5 6 7 1 8 9 10 11 12 13 14 15 2 16 17 18 19 20 21 22 23 3 24 25 26 27 28 29 30 31 4 32 33 34 35 36 37 38 39 5 40 41 42 43 44 45 46 47 6 48 49 50 51 52 53 54 55 7 56 57 58 59 60 61 62 63
假设你有一个像
>>> df = pd.DataFrame({"cid": np.arange(64)//8, "price": np.arange(64)}) >>> df.head() cid price 0 0 0 1 0 1 2 0 2 3 0 3 4 0 4
那么我想你可以通过组合groupby和{}得到你想要的:
groupby
这给了
>>> pivoted cid price1 price2 price3 price4 price5 price6 price7 price8 0 0 0 1 2 3 4 5 6 7 1 1 8 9 10 11 12 13 14 15 2 2 16 17 18 19 20 21 22 23 3 3 24 25 26 27 28 29 30 31 4 4 32 33 34 35 36 37 38 39 5 5 40 41 42 43 44 45 46 47 6 6 48 49 50 51 52 53 54 55 7 7 56 57 58 59 60 61 62 63
旁白:在字符串的末尾加上数字,例如“price5”,通常不是一个好主意。你不能真的和他们一起工作,他们不像你期望的那样分类,等等
首先,我们创建一个列,显示价格中的某个指数:
>>> df["num"] = df.groupby("cid")["price"].cumcount() + 1 >>> df.head(10) cid price num 0 0 0 1 1 0 1 2 2 0 2 3 [etc.] 7 0 7 8 8 1 8 1 9 1 9 2
然后我们pivot:
pivot
>>> pivoted = df.pivot(index="cid", columns="num", values="price") >>> pivoted num 1 2 3 4 5 6 7 8 cid 0 0 1 2 3 4 5 6 7 1 8 9 10 11 12 13 14 15 2 16 17 18 19 20 21 22 23 3 24 25 26 27 28 29 30 31 4 32 33 34 35 36 37 38 39 5 40 41 42 43 44 45 46 47 6 48 49 50 51 52 53 54 55 7 56 57 58 59 60 61 62 63
然后我们修复列:
>>> pivoted.columns = "price" + pivoted.columns.astype(str) >>> pivoted price1 price2 price3 price4 price5 price6 price7 price8 cid 0 0 1 2 3 4 5 6 7 1 8 9 10 11 12 13 14 15 2 16 17 18 19 20 21 22 23 3 24 25 26 27 28 29 30 31 4 32 33 34 35 36 37 38 39 5 40 41 42 43 44 45 46 47 6 48 49 50 51 52 53 54 55 7 56 57 58 59 60 61 62 63
最后我们重置索引:
>>> pivoted = pivoted.reset_index() >>> pivoted cid price1 price2 price3 price4 price5 price6 price7 price8 0 0 0 1 2 3 4 5 6 7 1 1 8 9 10 11 12 13 14 15 2 2 16 17 18 19 20 21 22 23 3 3 24 25 26 27 28 29 30 31 4 4 32 33 34 35 36 37 38 39 5 5 40 41 42 43 44 45 46 47 6 6 48 49 50 51 52 53 54 55 7 7 56 57 58 59 60 61 62 63
下面是@DSM方法的一个快速变化,使用
unstack()
。我将借用@DSM的示例数据,以便于比较pivot()
与unstack()
的结果:假设你有一个像
那么我想你可以通过组合}得到你想要的:
^{pr2}$groupby
和{这给了
旁白:在字符串的末尾加上数字,例如“price5”,通常不是一个好主意。你不能真的和他们一起工作,他们不像你期望的那样分类,等等
首先,我们创建一个列,显示价格中的某个指数:
然后我们
pivot
:然后我们修复列:
最后我们重置索引:
相关问题 更多 >
编程相关推荐