从lis在dataframe中添加列

2024-04-25 05:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中有些列如下:

A   B   C  
0   
4
5
6
7
7
6
5

A中的可能值范围仅为0到7

另外,我还有一个包含8个元素的列表,如下所示:

List=[2,5,6,8,12,16,26,32]  //There are only 8 elements in this list

如果A列中的元素是n,则需要在新列中插入列表中的第n个元素,例如'D'。

如何在不遍历整个数据帧的情况下一次性完成此操作?

生成的数据帧如下所示:

A   B   C   D
0           2
4           12
5           16
6           26
7           32
7           32
6           26
5           16

注意:数据帧很大,迭代是最后一个选项。但如果需要的话,我也可以在任何其他数据结构(如dict)中排列List中的元素。


Tags: 数据in元素数据结构only列表选项情况
3条回答

在“麻雀”的基础上改进的解决方案。

df成为您的数据集,然后mylist包含要添加到数据帧的值的列表。

假设您想简单地调用新列,new_column

首先将列表编成一系列:

column_values = pd.Series(mylist)

然后使用insert函数添加列。此函数的优点是允许您选择要放置列的位置。 在下面的示例中,我们将新列定位在从左开始的第一个位置(通过设置loc=0)

df.insert(loc=0, column='new_column', value=column_values)

IIUC,如果您将(不幸命名的)的List变成一个ndarray,您只需自然地索引到它。

>>> import numpy as np
>>> m = np.arange(16)*10
>>> m[df.A]
array([  0,  40,  50,  60, 150, 150, 140, 130])
>>> df["D"] = m[df.A]
>>> df
    A   B   C    D
0   0 NaN NaN    0
1   4 NaN NaN   40
2   5 NaN NaN   50
3   6 NaN NaN   60
4  15 NaN NaN  150
5  15 NaN NaN  150
6  14 NaN NaN  140
7  13 NaN NaN  130

在这里,我构建了一个新的m,但是如果使用m = np.asarray(List),同样的方法也应该起作用:df.A中的值将挑选出m中的适当元素。


请注意,如果您使用的是numpy的旧版本,那么您可能必须使用m[df.A.values]而不是——在过去,numpy不能很好地与其他版本一起使用,并且pandas中的一些重构引起了一些头痛。现在情况有所改善。

直接分配列表:

df['new_col'] = mylist

替代方案
将列表转换为序列或数组,然后指定:

se = pd.Series(mylist)
df['new_col'] = se.values

或者

df['new_col'] = np.array(mylist)

相关问题 更多 >