使用索引值在Python中创建新列

时间:2017-10-23 04:44:46

标签: python pandas keyerror

我有一个50x50的数据帧填充1。我使用融合函数创建一个长数据帧,其中第一列代表索引值。

    X   Y   value
0   0   0   1.0
1   1   0   1.0
2   2   0   1.0
3   3   0   1.0
... ... ... ...
29  29  0   1.0
... ... ... ...
2470 20 49  1.0
2471 21 49  1.0
2472 22 49  1.0
... ... ... ...
2498 48 49  1.0
2499 49 49  1.0

从原始的50x50矩阵开始,如果我从x = 0开始,y = 0(x是我的列,y是我的行)并向上移动一个位置,那么我在x = 0,y = 49。从熔化的数据帧中,x = 0和y = 49与索引号2450相关联。我想创建一个新列,其中表示相应的索引号,以便我有:

    X   Y   value index_value
0   0   0   1.0       2450

我试过了:

df["index_value"] = df.loc[df['X'], df['Y']] = '((Y-1)*50 + X)'

但是我收到了这个错误:

KeyError: '[0 0 0 ..., 49 49 49] not in index'

我也许可以使用groupby功能,但是非常感谢任何其他帮助!

2 个答案:

答案 0 :(得分:0)

如上所述,“index_value”列中的值应取决于原始50x50 DataFrame中条目的索引。关系是((Y-1)* 50 + X)

新DataFrame的索引还取决于50x50 DataFrame的索引。关系是((Y)* 50 + X)

可以看出,通过将熔化的DataFrame的索引移动50行,可以创建具有所需值的新列。所以,

reset_index()添加一个新的列索引,它是dataframe的索引

>>>df=df.reset_index()

np.roll将数字移动50行

>>>df['index']=np.roll(df['index'],50)

答案 1 :(得分:0)

您可以使用df.reset_index()方法。这将重置索引并创建一个名为“index”的新列

示例:

df = df.reset_index(drop=False)