5

我有一个数据框,想使用索引中的值来创建另一列。
例如:

df=pd.DataFrame({'idx1':range(0,5), 'idx2':range(10000,10005), 'value':np.random.randn(5)})
df.set_index(keys=['idx1','idx2'], inplace=True)
print df

               value
idx1 idx2           
0    10000 -1.470367
1    10001  0.260693
2    10002 -0.732319
3    10003 -0.116977
4    10004  1.106644

我想做这样的事情:

df['idx1_mod']= df['idx1'] + 100

(其实我想做更复杂的事情,但基本上我需要索引的值。)

现在我正在求助于重置索引(将索引字段作为列获取),通过访问列进行计算,然后重新创建索引。我确定我错过了一些明显的东西,但我已经看了很多并且一直错过它!

注意 - 我也尝试了 df.iterrows(),但似乎提供了行的副本并且不允许我更新原始数据框。

4

3 回答 3

8
df["idx1_mod"] = df.index.get_level_values(0).values + 100
于 2013-11-15T03:15:17.357 回答
2

试试这个:

for idx in range(len(df)):
    df['idx1_mod'][idx] = df.index[idx][0] + 100 
于 2013-11-15T01:21:48.650 回答
2

您可以drop=False在设置索引时使用以将键保留为列。这应该有效:

df.set_index(keys=['idx1','idx2'], inplace=True, drop=False)
df['idx1_mod'] = df['idx'] + 100
于 2018-08-10T23:28:06.337 回答