pandas 为什么`groupby`在缺少列时不返回KeyError?如何防止按原样使用值来确定组

waxmsbnn  于 2023-05-15  发布在  其他
关注(0)|答案(1)|浏览(236)
import pandas
df_trade = pandas.DataFrame(
    {
        "reporter": ["a", "a", "b", "b"],
        "reporter_code": [1, 1, 2, 2],
        "partner": ["x", "y", "x", "z"],
        "partner_code": [24, 25, 24, 26],
        "product": ["p", "p", "p", "p"],
        "value": [1, 2, 3, 4],
    }
)
index = ['reporter', 'product', 'year', 'reporter_code']
df_trade.groupby(index).agg(imp=("value", sum)).reset_index()
--
Out[1]:
           index  imp
0        product    2
1       reporter    1
2  reporter_code    4
3           year    3

df_trade中缺少“year”列,为什么groupby不返回KeyError?

文档

help(df_trade.groupby):
如果传递长度等于选定轴的列表或ndarray(请参见groupby user guide <https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#splitting-an-object-into-groups> _),则将按原样使用这些值来确定组。标签或标签列表可以传递给self中的列进行分组。
也许这是因为我的示例 Dataframe 恰好有4行,与用于groupby的index列表中的4个项目的数量完全相同。

  • 如何防止值被“按原样使用以确定组”?
6bc51xsx

6bc51xsx1#

以这种方式引发错误可确保数据框中存在所有索引列

for col in index:
    if col not in df_trade.columns:
        raise KeyError(f"{col} column not found")

这不是一个令人满意的答案,我仍然想知道:在这种情况下,是否可以使用pandas.groupby()来自行生成错误?

相关问题