Một giải pháp sẽ được sử dụng pandas.melt
để tránh tạo ra không cần thiết của một MultiIndex
, mặc dù điều này là không rằng tốn kém nếu khung hình của bạn là nhỏ và với giải pháp của tôi bạn vẫn phải tạo ra một tạm thời cho " nóng chảy "dữ liệu. Ruột của melt
gợi ý rằng cả hai id_vars
và value
được sao chép từ id_vars
tạo sử dụng tile
và value
tạo sử dụng df.values.ravel('F')
mà tôi tin rằng làm cho một bản sao nếu dữ liệu của bạn đang không ở trong trật tự Fortran.
EDIT: Tôi không chắc chắn chính xác khi một bản sao được thực hiện khi ravel
được gọi là kể từ khi thông số order
chỉ cho biết cách bạn muốn dữ liệu của bạn đọc và docstring nói một bản sao được thực hiện chỉ khi cần thiết.
In [99]: mons
Out[99]:
['Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec']
In [100]: df = DataFrame(randn(201, len(mons)), columns=mons, index=map(str, arange(1901, 2102)))
In [101]: df.head()
Out[101]:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct \
1901 1.141 -0.270 0.329 0.214 -1.030 0.324 -1.448 2.003 -0.061 0.477
1902 0.136 0.151 0.447 -0.493 1.329 1.410 0.020 -0.705 0.870 0.478
1903 -0.000 0.689 1.768 -0.057 -1.471 0.515 -0.315 0.703 2.511 0.592
1904 1.199 1.246 -0.255 0.182 -0.454 -0.452 1.074 0.178 2.495 -0.543
1905 1.073 1.375 -1.837 1.048 -0.139 -0.273 -0.958 -1.164 -1.012 0.950
Nov Dec
1901 0.102 0.122
1902 2.941 0.654
1903 0.347 -1.636
1904 -0.047 0.457
1905 1.277 -0.284
In [102]: df.reset_index(inplace=True)
In [103]: df.head()
Out[103]:
index Jan Feb Mar Apr May Jun Jul Aug Sep Oct \
0 1901 1.141 -0.270 0.329 0.214 -1.030 0.324 -1.448 2.003 -0.061 0.477
1 1902 0.136 0.151 0.447 -0.493 1.329 1.410 0.020 -0.705 0.870 0.478
2 1903 -0.000 0.689 1.768 -0.057 -1.471 0.515 -0.315 0.703 2.511 0.592
3 1904 1.199 1.246 -0.255 0.182 -0.454 -0.452 1.074 0.178 2.495 -0.543
4 1905 1.073 1.375 -1.837 1.048 -0.139 -0.273 -0.958 -1.164 -1.012 0.950
Nov Dec
0 0.102 0.122
1 2.941 0.654
2 0.347 -1.636
3 -0.047 0.457
4 1.277 -0.284
In [104]: res = pd.melt(df, id_vars=['index'], var_name=['months'])
In [105]: res['date'] = res['months'] + ' ' + res['index']
In [106]: res.head()
Out[106]:
index months value date
0 1901 Jan 1.141 Jan 1901
1 1902 Jan 0.136 Jan 1902
2 1903 Jan -0.000 Jan 1903
3 1904 Jan 1.199 Jan 1904
4 1905 Jan 1.073 Jan 1905
Nguồn
2013-08-15 18:47:02
Dịch vụ chăm sóc cử tri có nhận xét không? –
Ah tôi hiểu rồi. Vâng, "tốt hơn" là một sự lựa chọn của người nghèo. –