我有一个包含大量列的大型数据框。
对于数据框中的每一行/索引,我会做一些操作,读一些ancilliary ata等,并获得一个新值。有没有办法将新值添加到正确行/索引的新列中?
我可以使用.assign添加一个新列但是因为我循环遍历行并且只生成一次添加一个值的数据(生成它非常复杂)。当它生成时,我想立即将它添加到数据帧,而不是等到我生成整个系列。
这不起作用,并给出了一个关键错误:
df['new_column_name'].iloc[this_row]=value
我是否需要首先初始化该列?
答案 0 :(得分:19)
有两个步骤可以创建&仅使用行号填充新列... (在这种方法中, iloc 未被使用)
首先,使用行号
获取行索引值rowIndex = df.index[someRowNumber]
然后,使用行索引和 loc 函数来引用特定行并添加新列/值
df.loc[rowIndex, 'New Column Title'] = "some value"
这两个步骤可以合并为一行,如下所示
df.loc[df.index[someRowNumber], 'New Column Title'] = "some value"
答案 1 :(得分:10)
如果你有像
这样的数据框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]})
您可以将.loc
与行索引和列名称df.loc[row_indexer,column_indexer]=value
df.loc[[0,3],'Z'] = 3
输出:
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
答案 2 :(得分:1)
如果要向新列中的某些行添加值,则可以根据数据框其他单元格中的值来执行以下操作:
import pandas as pd
df = pd.DataFrame(data={"A":[1,1,2,2], "B":[1,2,3,4]})
根据cloumn“ A”中的值在新列中添加值:
df.loc[df.A == 2, "C"] = 100
如果“ A”列为2,则创建列“ C”并为其添加值100。
输出:
A B C
0 1 1 NaN
1 1 2 NaN
2 2 3 100
3 2 4 100
没有必要先初始化列。
答案 3 :(得分:0)
您可以只使用内置于DataFrame.at函数中的熊猫
您可以选择主要索引的列表,也可以选择单个索引和列
df.at [4,'B'] = 10