通过遍历两个列表为数据框分配值

时间:2019-07-19 18:55:23

标签: python pandas

我有一个数据框,表示按月显示的房价,看起来像这样

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 个答案:

答案 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)