将列的子集转换为列表

时间:2015-06-19 15:11:45

标签: python pandas

我有一个带有以下列的透视Pandas DataFrame:

month | day | hour | a | b | c | d | e | f | g ... z
1       1     1      3   9   0   9   0   3   3     9

将列az中的所有行转换为其值列表的最有效方法是什么,并使用此新列表列,而不是就地?生成的列将是:

month | day | hour | list
1       1     1      [3,9,0,9,0,3,3,9 ...]

我可以迭代行并手动将az组合到许多列表中,然后删除不必要的列,但可能会有更简单的方法。

1 个答案:

答案 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)