过滤占一列中 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)
我有一个数据框:
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)