从现有数据框的子集自动创建数据框

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 对象只需要一点开销时间,但是一旦拥有它,您几乎可以立即访问任意数量的组。

以上是关于从现有数据框的子集自动创建数据框的主要内容,如果未能解决你的问题,请参考以下文章

需要一种从现有数据框创建熊猫数据框的方法

有没有办法从 Scala 中数据框的现有列创建多个列?

为数据框的子集创建预测并附加到原始文件

如何重新标记连接到现有数据框的一些新计算的列?

如何使用单个索引更新多索引数据框中的记录

For循环子集化的熊猫数据框