簡體   English   中英

熊貓Goup和重命名DataFrame列名稱

[英]pandas Goup and Rename DataFrame Columns names

使用Zillow的房屋價值數據,我的數據框具有一系列列名稱,格式為yyyy-mm,例如

2001-01|2000-02|2000-03|2000-04|...|2016-08

這些列中的每一列都包含該時期內許多城市,州組合的平均房屋價值

RegionName      State 2000-01  2000-02  2000-03
Philadelphia    PA    53100    53200    53400

我需要對列進行分組,但將它們各自的四分之一分組,提供平均值並將其返回到新的數據框。 因此,對於所提供的示例,我將具有以下內容

RegionName     State 2000q1     2000q2 2000q3 2000q4
Philadelphia   PA    53233.33   ...    ...    ...

我不知道如何開始解決這個問題。 我能夠提取列名稱,獲取最后兩個字符,然后將它們映射到包含四分之一數字的字典中,僅此而已。 不確定如何重組數據

任何幫助是極大的贊賞

這類似於MaxU的回答 ,但顯示的方式 GROUPBY日期列非日期欄( RegionNameState )。

import numpy as np
import pandas as pd
df = pd.DataFrame({'2000-01': [53100], '2000-02': [53200], '2000-03': [53400], 'RegionName': ['Philadelphia'], 'State': ['PA']})

melted = pd.melt(df, id_vars=['RegionName', 'State'], var_name='date')
melted['date'] = pd.PeriodIndex(melted['date'], freq='Q')
result = melted.groupby(['RegionName', 'State', 'date']).mean()
result = result['value'].unstack('date')

產量

date                2000Q1
RegionName   State        
Philadelphia PA      53233

首先,使用pd.melt將所有日期列合並為一個列:

import numpy as np
import pandas as pd
df = pd.DataFrame({'2000-01': [53100], '2000-02': [53200], '2000-03': [53400], 'RegionName': ['Philadelphia'], 'State': ['PA']})

melted = pd.melt(df, id_vars=['RegionName', 'State'], var_name='date')
#      RegionName State     date  value
# 0  Philadelphia    PA  2000-01  53100
# 1  Philadelphia    PA  2000-02  53200
# 2  Philadelphia    PA  2000-03  53400

接下來,使用pd.PeriodIndex將日期(字符串?)轉換為pd.Period 注意, pd.PeriodIndex可以將不同的日期字符串轉換為相同的Period:

melted['date'] = pd.PeriodIndex(melted['date'], freq='Q')
#      RegionName State   date  value
# 0  Philadelphia    PA 2000Q1  53100
# 1  Philadelphia    PA 2000Q1  53200
# 2  Philadelphia    PA 2000Q1  53400

最后,使用groupby/mean將具有相同RegionNameStatedate行分組在一起,並計算每個組的平均值:

result = melted.groupby(['RegionName', 'State', 'date']).mean()
#                            value
# RegionName   State date         
# Philadelphia PA    2000Q1  53233

如果在此停止,則您的DataFrame將整齊(PDF) -每行代表一個“觀察”。 這通常是進行進一步計算的最佳形式。 (並非偶然地,此解決方案的第一步是將原始DataFrame轉換為整齊的格式-注意, melted的屬性還具有每一行代表一個觀察值的特性。)

但是,如果您願意,可以將date索引級別移動到單獨的列中:

result = result['value'].unstack('date')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM