gpt4 book ai didi

python - 从 DataFrame 中选择 ID 计数大于 X 的行

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:18 25 4
gpt4 key购买 nike

我有一个 Dataframe,其中有一列包含 ID。这个ID代表一个人,可以多次出现:

        col_id    col2     col3     col4....
row1 1
row2 1
row3 2
row4 3
row5 3
row6 3
row7 1
row8 7

我需要返回一个新的数据帧,其中 ID 列的 value_counts 大于 2。

新数据框:

         col_id    col2     col3     col4....
row1 1
row2 1
row3 3
row4 3
row5 3
row6 1

此新数据框仅包含 ID 计数大于 2 的行。

编辑

从这里开始,我需要按 ID 分隔数据。理想情况下,我想要一个解决方案,其中每个 ID 都有一个数据框:

数据框 1

    col_id   col2    col3    col4....
r1 1
r2 1
r3 1

数据框 2

    col_id   col2    col3    col4....
r1 2
r2 2
r3 2

数据框 3

    col_id   col2    col3    col4....
r1 3
r2 3
r3 3

是否可以将这些连接到一个大型数据框中?所以我可以有一个名为“索引”的新列,其中包含 ID==1、ID==2 等的行:

index
1 col_id col2 col3 col4....
r1 1
r2 1
r3 1



index
2 col_id col2 col3 col4....
r1 2
r2 2
r3 2


index
3 col_id col2 col3 col4....
r1 3
r2 3
r3 3

最佳答案

使用GroupBy.transformGroupBy.size对于与原始 DataFrame 具有相同大小的 Series,因此可以通过 boolean indexing 进行过滤:

df = df[df.groupby('col_id')['col_id'].transform('size') > 2]
print (df)
col_id
row1 1
row2 1
row4 3
row5 3
row6 3
row7 1

如果性能不重要或可以使用小的 DataFrame,请使用 DataFrameGroupBy.filter :

df = df.groupby('col_id').filter(lambda x: len(x) > 2)

编辑:对于 col_id 的单独 DataFrame,可以创建 DataFrame 字典:

dfs = dict(tuple(df.groupby('col_id')))
print (dfs[1])
col_id
row1 1
row2 1
row7 1

print (dfs[2])
col_id
row3 2

print (dfs[3])
col_id
row4 3
row5 3
row6 3

可能的,但非 pythonic 的全局解决方案,不推荐使用(仅供娱乐):

for i, df in df.groupby('col_id'):
globals()['df{}'.format(i)] = df

print (df1)
col_id
row1 1
row2 1
row7 1

关于python - 从 DataFrame 中选择 ID 计数大于 X 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55100498/

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