Pandas-具有不同值的DataFrame.groupby.head [重复]

csga3l58  于 2023-01-07  发布在  其他
关注(0)|答案(1)|浏览(127)
    • 此问题在此处已有答案**:

pandas groupby().head(n) where n is a function of group label(2个答案)
昨天关门了。
我有两个 Dataframe 。其中一个有会话ID和它们的截止点。另一个 Dataframe 有多行用于每个会话,我想取每个会话的前n行,n是来自另一个 Dataframe 的截止点。这是两个 Dataframe 的屏幕截图。

例如,会话0有20行,会话1有50行。会话0的截止索引为10,会话1的截止索引为30。我想执行groupby或任何矢量化操作,该操作将占用会话0的前10行和会话1的前30行。
有没有可能不循环?

xytpbqjk

xytpbqjk1#

举个例子:

import numpy as np
import pandas as pd

# Sample data:
df = pd.DataFrame({
    "session": np.repeat(np.arange(5), 4),
    "data": np.arange(20)
})

# Define the cutoffs for each session:
cutoffs = [3, 2, 4, 2, 1]
# Or use a dict: session -> cutoff

out = df.groupby("session").apply(lambda x: x.head(cutoffs[x.name]))
# x.name is the current session of whatever group is being worked on

输出:

session  data
session
0       0         0     0
        1         0     1
        2         0     2
1       4         1     4
        5         1     5
2       8         2     8
        9         2     9
        10        2    10
        11        2    11
3       12        3    12
        13        3    13
4       16        4    16

第二级指标为原始指标;您可以选择使用.droplevel(1)删除它

相关问题