我有一个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功能,但是非常感谢任何其他帮助!
答案 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)