嗨,大家好, 我在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
答案 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