【发布时间】:2020-12-31 15:08:56
【问题描述】:
我有一个 Pandas 数据框:
a=[1,1,1,2,2,2,3,3,3]
dic={'A':a}
df=pd.DataFrame(dic)
我对这个 df 应用了多索引:
index=[(1,'a'),(1,'b'),(1,'c'),(2,'a'),(2,'b'), (2, 'c'),(3,'a'),(3,'b'), (3,'c')]
df.index=pd.MultiIndex.from_tuples(index, names=['X','Y'])
我添加了一个新列:
df['B']='-'
现在我有一个 df:
A B
X Y
1 a 1 -
b 1 -
c 1 -
2 a 2 -
b 2 -
c 2 -
3 a 3 -
b 3 -
c 3 -
本质上,我想循环遍历多索引的 level='X',将一个级别添加到另一个级别,然后将值分配给 column='B'
这是我的想法:
dex=[]
for idx, select_df in df.groupby(level=0):
dex.append(idx)
#gives me a list of level='X' keys
dex_iter=iter(dex)
#creates an iterator from that list
last=next(dex_iter)
#gives me the first value of that list of keys, and moves the iterator to the next value
for i in dex_iter:
df.loc[i,'B']=df.loc[i,'A']+df.loc[last,'A']
last=i
我的预期结果是:
A B
X Y
1 a 1 -
b 1 -
c 1 -
2 a 2 3
b 2 3
c 2 3
3 a 3 5
b 3 5
c 3 5
相反,我得到的是:
A B
X Y
1 a 1 -
b 1 -
c 1 -
2 a 2 NaN
b 2 NaN
c 2 NaN
3 a 3 NaN
b 3 NaN
c 3 NaN
这显然是由于将值分配给多索引的一些特殊性。但我找不到解决此问题的方法。
【问题讨论】:
标签: python python-3.x pandas multi-index