过滤占一列中 X% 值的数据框行

Filter dataframe rows which contribute to X% of values in one column

我有一个数据框:

df
Col1   Col2   Col3
A      B      5
C      D      4
E      F      1

我只想查看占 Col3 90% 的那些行。在这种情况下,预期输出将是:

Col1   Col2   Col3
A      B      5
C      D      4

我尝试了以下方法,但没有按预期工作:

df['col3'].value_counts(normalize=True) * 100

有解决办法吗?

你在找这个吗?

df = df[df.Col3 > 0] # optionally remove 0 valued rows
df = df.sort_values(by='Col3', ascending=False).reset_index(drop=True)
totals = df.Col3.cumsum()
cutoff = totals[totals >= df.Col3.sum() * .7].idxmin()
print(df[:cutoff + 1])

输出

  Col1 Col2  Col3
0    A    B     5
1    C    D     4

@RSM,当你说90%的数据时,你希望90%的计算总是从顶部开始还是需要它是随机的?

   import pandas as pd
   import numpy as np
   from io import StringIO

   d = '''Col1   Col2   Col3
   A      B      5
   C      D      4
   E      F      1'''

   df = pd.read_csv(StringIO(d), sep='\s+')

   total_value = df['Col3'].sum()
   target_value = 0.9 * total_value
   df['Cumulative_Sum'] = df['Col3'].cumsum()

   desired_df = df.loc[df['Cumulative_Sum'] <=target_value]
   print(desired_df)