我想将N列转换为一个系列。如何有效地做到这一点?
输入:
0 1 2 3
0 64 98 47 58
1 80 94 81 46
2 18 43 79 84
3 57 35 81 31
预期输出:
0 64
1 80
2 18
3 57
4 98
5 94
6 43
7 35
8 47
9 81
10 79
11 81
12 58
13 46
14 84
15 31
dtype: int64
到目前为止,我尝试过:
print df[0].append(df[1]).append(df[2]).append(df[3]).reset_index(drop=True)
我对我的解决方案不满意,而且它不适用于动态列。请帮助我找到更好的方法。
答案 0 :(得分:3)
您需要np.flatten
pd.Series(df.values.flatten(order='F'))
out[]
0 64
1 80
2 18
3 57
4 98
5 94
6 43
7 35
8 47
9 81
10 79
11 81
12 58
13 46
14 84
15 31
dtype: int64
答案 1 :(得分:2)
您可以使用unstack
pd.Series(df.unstack().values)
答案 2 :(得分:2)
这又是一个简短的故事。
>>> pd.Series(df.values.ravel(order='F'))
>>>
0 64
1 80
2 18
3 57
4 98
5 94
6 43
7 35
8 47
9 81
10 79
11 81
12 58
13 46
14 84
15 31
dtype: int64
答案 3 :(得分:1)
使用pd.melt()
-
df.melt()['value']
输出
0 64
1 80
2 18
3 57
4 98
5 94
6 43
7 35
8 47
9 81
10 79
11 81
12 58
13 46
14 84
15 31
Name: value, dtype: int64
答案 4 :(得分:1)
df.T.stack().reset_index(drop=True)
出局:
0 64
1 80
2 18
3 57
4 98
5 94
6 43
7 35
8 47
9 81
10 79
11 81
12 58
13 46
14 84
15 31
dtype: int64
答案 5 :(得分:1)
您还可以使用Series
类和.values
属性:
pd.Series(df.values.T.flatten())
输出:
0 64
1 80
2 18
3 57
4 98
5 94
6 43
7 35
8 47
9 81
10 79
11 81
12 58
13 46
14 84
15 31
dtype: int64