通过循环访问两个列表为数据帧赋值



我有一个按月计算房价的数据框,看起来像这样

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())

不要iterrows,你可以明智地执行你的操作列:

for months, qt in zip(month_chunks, quarters):
    housing[qt] = housing[months].mean(axis=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)