繁体   English   中英

将迭代函数应用于pandas DataFrame中的每个组

[英]Applying iterative function to every group in pandas DataFrame

我有以下格式的大熊猫DataFrame:

        prod_id     timestamp     text
150523  0006641040  9.393408e+08  text_1 
150500  0006641040  9.408096e+08  text_2 
150499  0006641041  1.009325e+09  text_3 
150508  0006641041  1.018397e+09  text_4 
150524  0006641042  1.025482e+09  text_5

DataFrame按prod_idtimestamp排序。 我想做的是根据最早到最新的timestamp为每个prod_id枚举一个计数器。 例如,我正在尝试实现以下目标:

        prod_id     timestamp     text    enum  
150523  0006641040  9.393408e+08  text_1  1
150500  0006641040  9.408096e+08  text_2  2 
150499  0006641041  1.009325e+09  text_3  1 
150508  0006641041  1.018397e+09  text_4  2 
150524  0006641042  1.025482e+09  text_5  1

通过遍历每一行并增加计数器,我可以很容易地迭代执行此操作,但是有没有办法以更实用的编程方式来执行此操作?

更新:

In [324]: df
Out[324]:
        prod_id     timestamp    text
150523  6641040  9.393408e+08  text_1
150500  6641040  9.408096e+08  text_2
150501  6641040  9.408096e+08  text_3
150499  6641041  1.009325e+09  text_3
150508  6641041  1.018397e+09  text_4
150524  6641042  1.025482e+09  text_5

In [325]: df['enum'] = df.groupby(['prod_id'])['timestamp'].cumcount() + 1

In [326]: df
Out[326]:
        prod_id     timestamp    text  enum
150523  6641040  9.393408e+08  text_1     1
150500  6641040  9.408096e+08  text_2     2
150501  6641040  9.408096e+08  text_3     3
150499  6641041  1.009325e+09  text_3     1
150508  6641041  1.018397e+09  text_4     2
150524  6641042  1.025482e+09  text_5     1

旧答案:

In [314]: df['enum'] = df.groupby(['prod_id'])['timestamp'].rank().astype(int)

In [315]: df
Out[315]:
        prod_id     timestamp    text  enum
150523  6641040  9.393408e+08  text_1     1
150500  6641040  9.408096e+08  text_2     2
150499  6641041  1.009325e+09  text_3     1
150508  6641041  1.018397e+09  text_4     2
150524  6641042  1.025482e+09  text_5     1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM