首页 > 解决方案 > 从现有数据框的子集自动创建数据框

问题描述

我正在使用 kaggle 纽约市 Airbnb 开放数据,可在此处获得: https ://www.kaggle.com/dgomonov/new-york-city-airbnb-open-data

数据包含一列“neighbourhood_groups”,由纽约市的 5 个行政区组成,“neighbourhood”,由每个社区组内的社区组成。

我使用以下代码创建了曼哈顿社区的一个子集:

airbnb_manhattan = airbnb[airbnb['neighbourhood_group'] == 'Manhattan']

我想按社区创建此数据框的更多子集。但是,有 32 个社区,所以我想自动化这个过程。

这是我尝试过的代码:

manhattan_neighbourhoods = list(airbnb_manhattan['neighbourhood'].unique())

neighbourhoods = pd.DataFrame()

for n in manhattan_neighbourhoods:
    neighbourhoods[n] = pd.DataFrame(affordable_manhattan[affordable_manhattan['neighbourhood'] == manhattan_neighbourhoods[n]])

这会产生以下错误消息:

TypeError:列表索引必须是整数或切片,而不是 str

谢谢。

标签: pythonpandasdataframefor-loopautomation

解决方案


除非绝对必要,否则不应复制到新的 dfs。尝试尽可能使用完整的 df 进行分析。使用.groupby

by_neigh = airbnb.groupby('neighbourhood_group')

然后根据需要使用.agg.apply.transform。或者作为最后的手段,你可以迭代

for neigh, rows in by_neigh:

或者只找一组

by_neigh.get_group('Manhattan')

所有这一切的好处是,在绝对必要时不会复制底层数据,pandas 可以根据需要使用不同的过滤器和切片查看相同的数组。

文档中阅读更多内容


推荐阅读