通过迭代两个列表为数据框分配值

3

我有一个按月份分类的房价含义数据框,看起来像这样

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())
2个回答

3
不要使用 iterrows,你可以按列执行操作:
for months, qt in zip(month_chunks, quarters):
    housing[qt] = housing[months].mean(axis=1)

不用谢。请不要忘记点赞/接受答案。 - Quang Hoang

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接