Pandas:条件聚合均值和中位数
Pandas: Conditional aggregation mean and median
设置
我正在使用 Scrapy 抓取房屋广告并使用 pandas 分析结果。
我构建数据框,根据位置分组并聚合多个住房特征(例如租金)。
问题
我想构建相同的数据框,即根据位置进行分组并根据住房特征进行聚合,但现在也有条件地进行聚合。
也就是说,我有一个名为 type
的每个房屋广告的特征,它是 1
或 2
。我想根据位置进行分组,并以 type
为 1
或 2
为条件汇总住房特征。
代码
group = ['borough','click district name for housing ads','district']
mdf['# for rent'] = 1
aggregator = {
'median rent pw':'median',
'rent pw':'mean',
'# of roommates':'mean',
'# for rent':'sum',
}
badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)
这是我的工作代码,它不会有条件地聚合。
我在想我可以将 mdf
分成两个 DataFrame – 每个 type
– 然后 运行 两个框架上的代码并将结果合并为一个 table。虽然这似乎有点低效。
最好,我希望代码执行如下操作:
aggregator = {
'median rent pw type 1 ':'median, conditionally on type = 1',
'median rent pw type 2 ':'median, conditionally on type = 2',
'median rent pw':'median',
'rent pw type 1':'mean, conditionally on type = 1',
'rent pw type 2':'mean, conditionally on type = 2',
'rent pw':'mean',
'# of roommates':'mean',
'# for rent':'sum',
}
我该怎么办?
如果我没记错的话,我想你可以在 groupby
中包含 type
group = ['type', 'borough','click district name for housing ads','district']
mdf['# for rent'] = 1
aggregator = {
'median rent pw':'median',
'rent pw':'mean',
'# of roommates':'mean',
'# for rent':'sum',
}
badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)
那你应该可以在type == 1
badf.loc[1]
或者
badf.xs(1)
设置
我正在使用 Scrapy 抓取房屋广告并使用 pandas 分析结果。
我构建数据框,根据位置分组并聚合多个住房特征(例如租金)。
问题
我想构建相同的数据框,即根据位置进行分组并根据住房特征进行聚合,但现在也有条件地进行聚合。
也就是说,我有一个名为 type
的每个房屋广告的特征,它是 1
或 2
。我想根据位置进行分组,并以 type
为 1
或 2
为条件汇总住房特征。
代码
group = ['borough','click district name for housing ads','district']
mdf['# for rent'] = 1
aggregator = {
'median rent pw':'median',
'rent pw':'mean',
'# of roommates':'mean',
'# for rent':'sum',
}
badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)
这是我的工作代码,它不会有条件地聚合。
我在想我可以将 mdf
分成两个 DataFrame – 每个 type
– 然后 运行 两个框架上的代码并将结果合并为一个 table。虽然这似乎有点低效。
最好,我希望代码执行如下操作:
aggregator = {
'median rent pw type 1 ':'median, conditionally on type = 1',
'median rent pw type 2 ':'median, conditionally on type = 2',
'median rent pw':'median',
'rent pw type 1':'mean, conditionally on type = 1',
'rent pw type 2':'mean, conditionally on type = 2',
'rent pw':'mean',
'# of roommates':'mean',
'# for rent':'sum',
}
我该怎么办?
如果我没记错的话,我想你可以在 groupby
type
group = ['type', 'borough','click district name for housing ads','district']
mdf['# for rent'] = 1
aggregator = {
'median rent pw':'median',
'rent pw':'mean',
'# of roommates':'mean',
'# for rent':'sum',
}
badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)
那你应该可以在type == 1
badf.loc[1]
或者
badf.xs(1)