我有一个大型 Pandas DataFrame,其中包含多个列,包括类别、子类别、值和日期。我需要根据多个条件过滤此 DataFrame,然后聚合过滤结果。具体来说,我想:
Filter rows where Category is either "A" or "B".
Further filter these rows to include only those where Value is greater than 10.
Group the filtered data by SubCategory and calculate the sum of Value for each SubCategory.
Sort the results by the summed Value in descending order.
这是我的 DataFrame 的简化版本:
data = {
'Category': ['A', 'B', 'A', 'C', 'B', 'A'],
'SubCategory': ['X', 'Y', 'X', 'Z', 'X', 'Y'],
'Value': [5, 15, 20, 25, 10, 30],
'Date': pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06'])
}
df = pd.DataFrame(data)
我尝试链接几种 Pandas 方法来实现此目的,但我不确定这是否是最有效的方法。这是我目前的方法:
filtered_df = df[(df['Category'].isin(['A', 'B'])) & (df['Value'] > 10)]
grouped_df = filtered_df.groupby('SubCategory')['Value'].sum().reset_index()
sorted_df = grouped_df.sort_values(by='Value', ascending=False)
print(sorted_df)
这段代码似乎有效,但我担心它的效率和可读性,特别是对于更大的数据集。
你拥有的很好,使用口罩通常是过滤的最佳做法。
我想你可以预先选择必要的列:
output = (
df.loc[
df.Category.isin(['A', 'B']) & df.Value.gt(10),
["SubCategory", "Value"],
]
.groupby("SubCategory", as_index=False).sum()
.sort_values(by="Value", ascending=False)
)