我有一个数据框,表示按月显示的房价,看起来像这样
RegionName 2000-01 2000-02 2000-03
New York 200000 210000 220000
Austin 100000 110000 130000 ...
Los Angeles 180000 190000 200000
我有一个对应于季度的月份列表和一个看起来像季度的列表
month_chunks = [['2000-01', '2000-02', '2000-03'], ['2000-04', '2000-05', '2000-06']...]
quarters = ['2000q1', '2000q2', '2000q3'...]
我正在尝试在数据框中创建按季度包含平均价格的列
for quarter, chunk in zip(quarters, month_chunks):
housing[quarter] = np.mean(housing[chunk].mean())
RegionName 2000-01 2000-02 2000-03 2000q1
New York 200000 210000 220000 210000
Austin 100000 110000 130000 ... 113333.333
Los Angeles 180000 190000 200000 190000
但这给了我每一行重复的列
RegionName 2000-01 2000-02 2000-03 2000q1
New York 200000 210000 220000 210000
Austin 100000 110000 130000 ... 210000
Los Angeles 180000 190000 200000 210000
数据框很大,因此无法对其进行遍历并且列表不可用
for i, row in housing.iterrows():
for quarter, chunk in zip(quarters, month_chunks):
row[quarter].iloc[i] = np.mean(row[chunk].iloc[i].mean())
答案 0 :(得分:3)
不要iterrows
,您可以明智地执行操作列:
for months, qt in zip(month_chunks, quarters):
housing[qt] = housing[months].mean(axis=1)
答案 1 :(得分:1)
这是使用groupby
from collections import ChainMap
d=dict(ChainMap(*[dict.fromkeys(x,y)for x , y in zip(month_chunks,quarters)]))
s=housing.set_index('RegionName').groupby(d,axis=1).mean()
s
Out[32]:
2000q1
RegionName
NewYork 210000.000000
Austin 113333.333333
LosAngeles 190000.000000
df=pd.concat([housing.set_index('RegionName'),s],axis=1)