Pandas - 将特定iloc的值添加到新的dataframe列中

Rob*_*Rob 21 python numpy pandas

我有一个包含大量列的大型数据框.

对于数据帧中的每一行/索引,我做一些操作,读取一些ancilliary ata等,并获得一个新值.有没有办法将新值添加到正确行/索引的新列中?

我可以使用.assign添加一个新列但是因为我循环遍历行并且只生成一次添加一个值的数据(生成它非常复杂).当它生成时,我想立即将它添加到数据帧,而不是等到我生成整个系列.

这不起作用,并给出一个关键错误:

df['new_column_name'].iloc[this_row]=value
Run Code Online (Sandbox Code Playgroud)

我需要首先初始化列还是什么?

Rum*_*ish 27

只使用行号创建和填充新列有两个步骤...(在这种方法中,不使用iloc)

首先,使用行号获取行索引

rowIndex = df.index[someRowNumber]
Run Code Online (Sandbox Code Playgroud)

然后,使用带有loc函数的行索引来引用特定行并添加新列/值

df.loc[rowIndex, 'New Column Title'] = "some value"
Run Code Online (Sandbox Code Playgroud)

这两个步骤可以组合成一行,如下所示

df.loc[df.index[someRowNumber], 'New Column Title'] = "some value"
Run Code Online (Sandbox Code Playgroud)


Flo*_*oor 11

如果你有一个数据帧

import pandas as pd
df = pd.DataFrame(data={'X': [1.5, 6.777, 2.444, pd.np.NaN], 'Y': [1.111, pd.np.NaN, 8.77, pd.np.NaN], 'Z': [5.0, 2.333, 10, 6.6666]})
Run Code Online (Sandbox Code Playgroud)

您可以使用.loc行索引和列名称来代替ilocdf.loc[row_indexer,column_indexer]=value

df.loc[[0,3],'Z'] = 3
Run Code Online (Sandbox Code Playgroud)

输出:

       X      Y       Z
0  1.500  1.111   3.000
1  6.777    NaN   2.333
2  2.444  8.770  10.000
3    NaN    NaN   3.000


小智 9

您可以只使用 pandas 内置函数 DataFrame.at

您可以选择多个索引或单个索引和列的列表

df.at[4, 'B'] = 10
Run Code Online (Sandbox Code Playgroud)


小智 7

如果要向新列中的某些行添加值,根据数据框其他单元格中的值,您可以这样做:

import pandas as pd
df = pd.DataFrame(data={"A":[1,1,2,2], "B":[1,2,3,4]})
Run Code Online (Sandbox Code Playgroud)

根据 cloumn "A" 中的值在新列中添加值:

df.loc[df.A == 2, "C"] = 100
Run Code Online (Sandbox Code Playgroud)

如果列“A”为 2,这将创建列“C”并将值 100 添加到它。

输出:

   A  B  C
0  1  1  NaN
1  1  2  NaN
2  2  3  100
3  2  4  100
Run Code Online (Sandbox Code Playgroud)

没有必要先初始化列。