gpt4 book ai didi

python - 将数据分组并汇总到新的 pandas 数据框中

转载 作者:行者123 更新时间:2023-12-01 04:44:14 24 4
gpt4 key购买 nike

我有一个如下所示的数据框(我的实际数据框约为 200k 行)。每行都是唯一的用户距原点的距离以及自上次登录以来的时间。

+------------+------------------+
| time_since | dist_from_origin |
+------------+------------------+
| 1 | 0.12 |
| 0 | 71.15 |
| 4 | 74.48 |
| 2 | 19.69 |
| 3 | 0.12 |
| 0 | 132.92 |
| 1 | 174.45 |
| 4 | 0.12 |
| 3 | 81.07 |
| 2 | 65.43 |
| 1 | 162.58 |
| 0 | 0.12 |
| 3 | 0.12 |
| 4 | 20.68 |
| 3 | 109.93 |
| 2 | 100.87 |
| 0 | 131.50 |
| 0 | 132.74 |
| 4 | 181.35 |
| 3 | 150.55 |
+------------+------------------+

我想创建一个新的数据框来总结数据,如下例所示。其中第一列是不活动的天数,第二列是组中用户(行?)的计数,后面的每一列是符合该特定条件的距离计数。

+---------------+-----------+-----+-------------+--------------+---------------+----------------+----------------+
| days inactive | num users | <=5 | >5 and <=25 | >25 and <=50 | >50 and <=100 | >100 and <=150 | >150 and <=225 |
+---------------+-----------+-----+-------------+--------------+---------------+----------------+----------------+
| 0 | 5 | 1 | 0 | 0 | 1 | 3 | 0 |
| 1 | 3 | 1 | 0 | 0 | 0 | 0 | 2 |
| 2 | 3 | 0 | 1 | 0 | 1 | 1 | 0 |
| 3 | 5 | 2 | 0 | 0 | 1 | 1 | 1 |
| 4 | 4 | 1 | 1 | 0 | 1 | 0 | 1 |
+---------------+-----------+-----+-------------+--------------+---------------+----------------+----------------+

我尝试通过循环遍历 groupby 对象中的组来完成摘要数据帧,其中该对象按时间分组,但为每个组创建摘要并附加到新数据框。

例如。我在第一步中遇到了错误:计算每组中的行数:

grouped = df.groupby(df['time_since'])

for group in grouped:
print group['time_since'].count()


---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-28-2182867bdacc> in <module>()
1 for group in grouped:
----> 2 print group['time_since'].count()

TypeError: tuple indices must be integers, not str

我在想另一种选择是为每个案例创建 bool 掩码,然后总结每个掩码。

我要问的是,从原始数据帧到摘要数据帧的最简单方法是什么?

最佳答案

这是一种方法。

创建您的BINS

In [144]: BINS = [0,5,25,50,100,150,225]

然后,对 'time_since' 和存储桶进行分组 pd.cut(df['dist_from_origin'], BINS)]

In [145]: (df.groupby(['time_since', pd.cut(df['dist_from_origin'], BINS)])
.size().unstack('dist_from_origin').fillna(0))
Out[145]:
dist_from_origin (0, 5] (100, 150] (150, 225] (5, 25] (50, 100]
time_since
0 1 3 0 0 1
1 1 0 2 0 0
2 0 1 0 1 1
3 2 1 1 0 1
4 1 0 1 1 1

关于python - 将数据分组并汇总到新的 pandas 数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29852342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com