有什么方法可以从熊猫中的浮动列创建一列元组?

时间:2016-05-04 16:40:17

标签: python pandas dataframe data-processing

我给出了以下形式的元组列表:

ls = [(14, 6, 1.5), (14, 7, 1.5), (14, 8, 1.5), (14, 9, 1.5), (14, 10, 1.5), (14, 11, 1.5), (14, 12, 1.5), ..., (14, 13, 1.5), (14, 14, 1.5), (14, 15, 1.5)]

有一个pandas DataFrame,其中一列data['ind']是与上面列表的索引相对应的整数。 现在我想创建一个新列,其中包含对应于同一行的索引列条目的元组。我是这样做的:

data['ls'] = data['ind'].apply(lambda x: ls[x])

但是我收到了以下错误:

ValueError: setting an array element with a sequence.

有没有解决此错误的方法?如果列表包含浮点数或整数而不是元组,则代码可以正常工作......

2 个答案:

答案 0 :(得分:2)

我首先从你的元组列表中创建一个Series

LS = pd.Series(ls)

然后拨打map

data['ls'] = data['ind'].map(LS)

使用列表中的示例:

ls = [(14, 6, 1.5), (14, 7, 1.5), (14, 8, 1.5), (14, 9, 1.5), (14, 10, 1.5), (14, 11, 1.5), (14, 12, 1.5)]

和此:

data = pd.DataFrame({'ind':[0,2,3]})

执行查找会导致:

In [10]: LS = pd.Series(ls)

In [11]: LS
Out[11]: 
0     (14, 6, 1.5)
1     (14, 7, 1.5)
2     (14, 8, 1.5)
3     (14, 9, 1.5)
4    (14, 10, 1.5)
5    (14, 11, 1.5)
6    (14, 12, 1.5)
dtype: object

In [12]: data['ls'] = data['ind'].map(LS)

In [13]: data
Out[13]: 
   ind            ls
0    0  (14, 6, 1.5)
1    2  (14, 8, 1.5)
2    3  (14, 9, 1.5)

答案 1 :(得分:1)

您可以从ls创建数据框并将其合并到您的数据中。

data.merge(pd.DataFrame(ls, columns['ls']), left_on='ind', right_index=True)