pandas 要分组的数据框列表

标签 pandas pandas-groupby

拥有 pandas 数据帧列表,如何将它们连接到单个 groupby 对象中以对它们进行矢量化计算?

dfs 相似,连接后无法对它们进行分组。

组n:

index some_values
0     2
1     3
2     2
3     2

第 n+1 组:

index some_values
6     1
7     4
8     4

我可以循环遍历列表来添加标识符,但由于这个操作是另一个循环的一部分,我必须避免这个内部循环。

换个方式问问题:如何将带有 cumsum 的标识符添加到列表中的 DF 行中,避免循环操作?

我如何到达那里的故事:

首先,我有一个 bool 值 DF,用于拆分 Trues 和组 Falses:

initial_df:

index boolean
0     False
1     False
2     False
3     True
4     True
5     False
6     False
7     False
8     False
9     False

我使用这个狙击来获取我需要的dfsgroupes:

https://stackoverflow.com/questions/57132096/pandas-how-to-groupby-based-on-series-pattern

x = listing_calendar[~listing_calendar["available"]].index.values
groups = np.split(x, np.where(np.diff(x)>1)[0]+1)
grouped_dfs = [listing_calendar.iloc[gr, :] for gr in groups]

grouped_dfs[0]:

    index boolean
    0     False
    1     False
    2     False

grouped_dfs[2]:

    index boolean
     5     False
     6     False
     7     False
     8     False
     9     False

进一步groupby的预期 df:

index boolean group_id
0     False     0  
1     False     0   
2     False     0
3     True      
4     True
5     False     1
6     False     1
7     False     1
8     False     1
9     False     1

或插入grouped_dfsgroupby对象来使用

谢谢!

最佳答案

你可以使用类似的东西:

s=np.where(~df.boolean,df.boolean.ne(df.boolean.shift()).cumsum(),np.nan)
final=df.assign(group=pd.Series(pd.factorize(s)[0]+1).replace(0,np.nan))

   index  boolean  group
0      0    False    1.0
1      1    False    1.0
2      2    False    1.0
3      3     True    NaN
4      4     True    NaN
5      5    False    2.0
6      6    False    2.0
7      7    False    2.0
8      8    False    2.0
9      9    False    2.0

详细信息:

通过反转~使用np.where(),并使用df.boolean.ne(df.boolean.shift()).cumsum(与同一系列上的移位值进行比较来分配值):

np.where(~df.boolean,df.boolean.ne(df.boolean.shift()).cumsum(),np.nan)
#array([ 1.,  1.,  1., nan, nan,  3.,  3.,  3.,  3.,  3.])

然后使用 factorize(),它对于 NaN 返回 -1。当我们执行 +1 之后,我们用 np.nan 替换 0。

关于pandas 要分组的数据框列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57163222/

相关文章:

python - 对 DataFrame 进行分组,计算一列中的出现次数,将其他列值放入集合中

python - Pandas groupby 保持顺序

python - 设置 pandas 数据框的格式

python - Pandas 在每行给定值的不同数据帧之间进行线性插值

Python Pandas 应用,将字典作为参数传递

python - 使用 Pandas 嵌套 JSON

python - 将组中项目的长度/数量分配给新列

python - 如何使用条形图绘制最小/最大条形图

python - 如何旋转数据框?

python - 如何使用 groupby 和 .loc 顺序过滤数据帧