我有一个带有以下列的透视Pandas DataFrame:
month | day | hour | a | b | c | d | e | f | g ... z
1 1 1 3 9 0 9 0 3 3 9
将列a
到z
中的所有行转换为其值列表的最有效方法是什么,并使用此新列表列,而不是就地?生成的列将是:
month | day | hour | list
1 1 1 [3,9,0,9,0,3,3,9 ...]
我可以迭代行并手动将a
到z
组合到许多列表中,然后删除不必要的列,但可能会有更简单的方法。
答案 0 :(得分:1)
实际上这很简单,我们可以调用属性.values
来返回df值的np数组,这有一个方法tolist()
,你可以直接将它分配给你的新列: / p>
In [258]:
import pandas as pd
import io
t="""month day hour a b c d e f g z
1 1 1 3 9 0 9 0 3 3 9"""
df = pd.read_csv(io.StringIO(t), sep='\s+')
df = pd.concat([df]*2, ignore_index=True)
df
Out[258]:
month day hour a b c d e f g z
0 1 1 1 3 9 0 9 0 3 3 9
1 1 1 1 3 9 0 9 0 3 3 9
In [264]:
df['list'] = df[df.columns[3:]].values.tolist()
df
Out[264]:
month day hour a b c d e f g z list
0 1 1 1 3 9 0 9 0 3 3 9 [3, 9, 0, 9, 0, 3, 3, 9]
1 1 1 1 3 9 0 9 0 3 3 9 [3, 9, 0, 9, 0, 3, 3, 9]
来自.values
的输出:
In [265]:
df[df.columns[3:]].values
Out[265]:
array([[3, 9, 0, 9, 0, 3, 3, 9, [3, 9, 0, 9, 0, 3, 3, 9]],
[3, 9, 0, 9, 0, 3, 3, 9, [3, 9, 0, 9, 0, 3, 3, 9]]], dtype=object)