如何重塑这个数据框
How to reshape this dataframe
我需要像这样重塑数据框:
nam code date1 date2
0 a 1 1/1 1/2
1 b 3 3/4 4/5
但是 df.stack
在这种情况下似乎没用。
期望的输出:
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
您可以使用lreshape
、sort_values
by column nam
, reindex_axis
columns and last reset_index
:
print pd.lreshape(df, {'date': ['date1', 'date2']})
.sort_values('nam')
.reindex_axis(['nam','code','date'], axis=1)
.reset_index(drop=True)
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
melt
, drop
for droping column variable
, sort_values
by column nam
and last reset_index
的另一个解决方案:
print pd.melt(df, id_vars=['nam','code'], value_name='date')
.drop('variable', axis=1)
.sort_values('nam')
.reset_index(drop=True)
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
编辑:
lreshape
is now undocumented, but is possible in future will by removed (with pd.wide_to_long too)。
可能的解决方案是将所有 3 个功能合并为一个 - 也许 melt
,但现在尚未实施。也许在 pandas 的一些新版本中。然后我的回答会更新。
我需要像这样重塑数据框:
nam code date1 date2
0 a 1 1/1 1/2
1 b 3 3/4 4/5
但是 df.stack
在这种情况下似乎没用。
期望的输出:
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
您可以使用lreshape
、sort_values
by column nam
, reindex_axis
columns and last reset_index
:
print pd.lreshape(df, {'date': ['date1', 'date2']})
.sort_values('nam')
.reindex_axis(['nam','code','date'], axis=1)
.reset_index(drop=True)
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
melt
, drop
for droping column variable
, sort_values
by column nam
and last reset_index
的另一个解决方案:
print pd.melt(df, id_vars=['nam','code'], value_name='date')
.drop('variable', axis=1)
.sort_values('nam')
.reset_index(drop=True)
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
编辑:
lreshape
is now undocumented, but is possible in future will by removed (with pd.wide_to_long too)。
可能的解决方案是将所有 3 个功能合并为一个 - 也许 melt
,但现在尚未实施。也许在 pandas 的一些新版本中。然后我的回答会更新。