[英]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日期列和非日期欄( RegionName
, State
)。
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
將具有相同RegionName
, State
和date
行分組在一起,並計算每個組的平均值:
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.