在熊猫中加入2个数据集

时间:2017-12-07 11:14:27

标签: pandas

嗨,大家好, 我在Pandas中加入2个数据集时遇到了麻烦。第一个包含每年在一个月中销售的每种类型的房屋的数量,第二个包含每年建造的每种类型的房屋数量。我试图将每一行中的2个显示结合起来:年份,房屋类型,12个月的平均价格以及当年建造的房屋数量。一个问题是,第一个数据集中的行和第二个列中的列显示年份,我不知道如何处理它。另一个问题是试图获得12个月的平均价格。我在最后添加了一个平均价格的专栏,但其中包括年份也不好。此外,不确定如何只获得平均价格,而不是每个月都添加数据集。 任何建议表示赞赏,谢谢。

数据集1包含已售出的房屋:

Year type          Jan     Feb    Mar ... Dec
2016  Oakham       160000  165000
2016  Alvingham    155000  150000
2017  Oakham
2017  Alvingham

数据集2包含已建造的房屋:

               2015    2016    2017
Oakham          150     200     250
Alvingham        50      85
Chesam

预期输出将是这样的:

YEAR    TYPE       AVERAGE PRICE       AMOUNT BUILT
2016    Oakham            175500                200
2017    Chesam            325000                 20

1 个答案:

答案 0 :(得分:0)

这是一个解决方案:

DF1:

      Feb     Jan  Year       type
0  165000  160000  2016     Oakham
1  155000  150000  2016  Alvingham
2  165000  165000  2017     Oakham
3  165000  160000  2017  Alvingham

DF2:

           2015  2016  2017
Oakham      150   200   250
Alvingham    50    85    80

首先,您必须仅计算价格列的平均值:

df1['avg'] = df1.drop(['type', 'Year'], axis=1).mean(axis=1) print(df1)

      Feb     Jan  Year       type       avg
0  165000  160000  2016     Oakham  162500.0
1  155000  150000  2016  Alvingham  152500.0
2  165000  165000  2017     Oakham  165000.0
3  165000  160000  2017  Alvingham  162500.0

现在你只需要将df1与df2的未堆叠版本合并:

df3 = pd.merge(left=df1[['type', 'Year', 'avg']],
               right=df2.unstack().reset_index(),
               left_on=['type', 'Year'],
               right_on=['level_1','level_0'])

print(df3)的输出是:

        type  Year       avg  level_0    level_1    0
0     Oakham  2016  162500.0     2016     Oakham  200
1  Alvingham  2016  152500.0     2016  Alvingham   85
2     Oakham  2017  165000.0     2017     Oakham  250
3  Alvingham  2017  162500.0     2017  Alvingham   80

然后您可以删除不需要的列并重命名其他列:

print(df3.drop(['level_0', 'level_1'],
                axis=1).rename(columns={0: 'AMOUNT BUILT',
                                        'avg': 'AVERAGE PRICE'}))

结果是:

        type  Year  AVERAGE PRICE  AMOUNT BUILT
0     Oakham  2016       162500.0           200
1  Alvingham  2016       152500.0            85
2     Oakham  2017       165000.0           250
3  Alvingham  2017       162500.0            80