我有一个如下所示的DataFrame:
Name Year Jan Feb Mar Apr
Bee 1998 26 23 22 19
Cee 1999 43 23 43 23
我想将DataFrame更改为以下内容:
Name Year Mon Val
Bee 1998 1 26
Bee 1998 2 23
Bee 1998 3 22
Bee 1998 4 19
Cee 1999 1 43
Cee 1999 2 23
Cee 1999 3 43
Cee 1999 4 23
如何使用Pandas或任何其他库在Python中获取此内容?
答案 0 :(得分:0)
首先,使用pd.DataFrame.melt
:
df = df.melt(id_vars=['Name', 'Year'], var_name='Mon', value_name='Value')
...然后将Mon
值转换为日期时间值,并提取月份数:
df.loc[:, 'Mon'] = pd.to_datetime(df['Mon'], format='%b').dt.month
# Name Year Mon Value
# 0 Bee 1998 1 26
# 1 Cee 1999 1 43
# 2 Bee 1998 2 23
# 3 Cee 1999 2 23
# 4 Bee 1998 3 22
# 5 Cee 1999 3 43
# 6 Bee 1998 4 19
# 7 Cee 1999 4 23
答案 1 :(得分:0)
df = df.set_index(['Name', 'Year'])
df.columns = pd.to_datetime(df.columns, format='%b').month
df.stack()
返回
Name Year
Bee 1998 1 26
2 23
3 22
4 19
Cee 1999 1 43
2 23
3 43
4 23
dtype: int64