python怎么索引txt数据中第四行_python-在熊猫数据框中按行计数编制索引

我有一个带有两个元素的层次结构索引的“熊猫”数据框(“ month”和“ item_id”).每行表示特定月份的特定项目,并具有用于关注多个数值度量的列.具体细节无关紧要,因此我们仅出于此目的说我们有X列.

我的问题源于一个事实,即项目在其观察的月份中有所不同,这可能是连续的,也可能不是连续的.我需要计算第一个,第二个,…,第n个月中所有项目的X平均值,其中该项目有一个观测值.

换句话说,结果的第一行应该是数据框中第一行所有项目的平均值,第二条结果应该是第二个观测值所有项目的平均值,依此类推.

换句话说,如果我们要获取每个项目的所有按日期排序的行,并从i = 1,2,…,n对其进行索引,那么我需要获得所有行1,2的值的平均值, …,n.也就是说,我想要所有项目中每个项目的第一观察值的平均值,所有项目中第二个观察值的平均值,依此类推.

我怎样才能最好地做到这一点?我无法使用现有的日期索引,因此我是否需要向数据框添加另一个索引(类似于我在上一段中描述的内容),或者我唯一的办法是遍历每个项目的行并保持运行平均值?这会起作用,但无论如何都不会利用熊猫的力量.

添加一些示例数据:

item_id date X DUMMY_ROWS

20 2010-11-01 16759 0

2010-12-01 16961 1

2011-01-01 17126 2

2011-02-01 17255 3

2011-03-01 17400 4

2011-04-01 17551 5

21 2007-09-01 4 6

2007-10-01 5 7

2007-11-01 6 8

2007-12-01 10 9

22 2006-05-01 10 10

2006-07-01 13 11

23 2006-05-01 2 12

24 2008-01-01 2 13

2008-02-01 9 14

2008-03-01 18 15

2008-04-01 19 16

2008-05-01 23 17

2008-06-01 32 18

为了说明起见,我添加了数据中不存在的虚拟行列.我正在描述的操作将有效地给出行0、6、10、12和13的平均值(每个项目的第一个观察值),然后给出行1,7、11和15的平均值(对于每个项目,但不包括项目23,因为它只有一个观测值),依此类推.

解决方法:

一种选择是重置索引,然后按ID分组.

df_new = df.reset_index()

df_new.groupby(['item_id']).X.agg(np.mean)

这样就可以保持原始df的完整性,并获得每个项目ID的所有月份的平均值.

对于您更新的问题(顺便说一句,很好的例子),我认为方法是添加“ item_sequence_id”,我已经在路径中使用了类似的数据.

df.sort(['item_id', 'date'], inplace = True)

def sequence_id(item):

item['seq_id'] = range(0,len(item)-1,1)

return item

df_with_seq_id = df.groupby(['item_id']).apply(sequence_id)

df_with_seq_id.groupby(['seq_id']).agg(np.mean)

这里的想法是seq_id允许您确定每个item_id数据时间点的位置,为这些项目分配非唯一的seq_id值将允许您跨多个项目进行分组.我之前使用过的上下文与用户在会话中首先执行某项操作有关.使用此ID结构,我可以识别用户执行的所有第一,第二,第三等操作,而无需考虑他们的绝对时间和用户ID.

希望这是您想要的更多.

标签:pandas,python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值