从现有数据框的子集自动创建数据框
Posted
技术标签:
【中文标题】从现有数据框的子集自动创建数据框【英文标题】:Automating the creation of dataframes from subsets of an existing dataframe 【发布时间】:2020-08-20 02:33:04 【问题描述】:我正在使用 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
谢谢。
【问题讨论】:
【参考方案1】:除非绝对必要,否则不应复制到新的 dfs。尝试尽可能使用完整的 df 进行分析。使用.groupby
,如
by_neigh = airbnb.groupby('neighbourhood_group')
然后根据需要使用.agg
、.apply
或.transform
。或者作为最后的手段,你可以迭代
for neigh, rows in by_neigh:
或者只找一组
by_neigh.get_group('Manhattan')
所有这些的好处是底层数据不会被复制到绝对必要的时候,pandas 可以根据需要使用不同的过滤器和切片查看相同的数组。
在docs了解更多信息
【讨论】:
数据框包含列表的 lat 和 lng 点。因此,对于每个社区的子集,我想生成一个散点图。在将数据发送到绘图之前,需要对数据进行子集化。我不认为我可以用 .groupby 做到这一点。 是的,您绝对可以使用 groupby 来做到这一点,或者循环并将每个组传递给图表函数,或者使用.get_group
并只传递一个。创建 groupby 对象只需要一点开销时间,但是一旦拥有它,您几乎可以立即访问任意数量的组。以上是关于从现有数据框的子集自动创建数据框的主要内容,如果未能解决你的问题,请参考以下文章