gpt4 book ai didi

python - 如何从 Pandas 数据框中删除少数行?

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:21 26 4
gpt4 key购买 nike

我有一个数据框。对于前两列中所有可能的值组合,我想删除那些行数小于 100 的行。

例如,有 5 行,其中第一列是“A”,第二列是“B”。我想从数据框中删除所有这些行。共有 110 行,其中第一行和第二行分别包含“C”和“D”。这些行我不想删除,因为 110 > 5。

最优雅、最快速的方法是什么?

这是我目前的解决方案:

gr = df.groupby(['L_ID', 'P_ID'])
for group in gr.groups:
df_tmp = gr.get_group(group)
n_vals = len(df_tmp)
if n_vals < min_n:
df = df[(df['L_ID'] != group[0]) | (df['P_ID'] != group[1])]

最佳答案

您可以使用 filter()方法:

# test data
>>> df1 = pd.DataFrame({'a':list('AAABB'), 'b':list('BBBAA'), 'c':range(5)})
>>> df1
a b c
0 A B 0
1 A B 1
2 A B 2
3 B A 3
4 B A 4

>>> df1.groupby(['a','b']).filter(lambda x: len(x) > 2)
a b c
0 A B 0
1 A B 1
2 A B 2

更新

看起来这个方法在有更多列时不起作用:

>>> df1 = pd.DataFrame({'a':list('AAABB'), 'b':list('BBBAA'), 'c':range(5), 'd':range(5)})
>>> df1
a b c d
0 A B 0 0
1 A B 1 1
2 A B 2 2
3 B A 3 3
4 B A 4 4
>>> df1.groupby(['a','b']).filter(lambda x: len(x) > 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pandas\core\groupby.py", line 2094, in filter
if res:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

这是一个解决方案:

>>> df1.groupby(['a','b']).filter(lambda x: len(x['c']) > 2)
a b c d
0 A B 0 0
1 A B 1 1
2 A B 2 2

您还可以使用 transform() :

>>> df1[df1.groupby(['a','b'])['c'].transform(lambda x: len(x) > 2).astype(bool)]
a b c d
0 A B 0 0
1 A B 1 1
2 A B 2 2

关于python - 如何从 Pandas 数据框中删除少数行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424083/

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