在熊猫中,当我们爆炸数据框时
df = pd.DataFrame({'A':[['e', 'g', 'p'],['c', 'x']]})
通过命令df.explode('A')
我们得到
df1 = pd.DataFrame({'A':['e', 'g', 'p','c', 'x']}, index = [0,0,0,1,1])
到目前为止,一切都很好。但是如果每个列表中元素的排名有意义并且我们希望在爆炸后拥有这个排名怎么办?得到这样的东西:
df2 = pd.DataFrame({'A':['e', 'g', 'p','c', 'x'], 'Rank_in_Group':[1,2,3,1,2]}, index = [0,0,0,1,1])
尝试:
通过groupby()
和cumcount()
:
df1['Rank_in_Group']=df1.groupby(df1.index).cumcount()+1
或者
通过map()
和apply()
:
df['Rank_in_Group']=df['A'].map(lambda x:range(1,len(x)+1))
df1=df.apply(pd.Series.explode)
的输出df1
:
A Rank_in_Group
0 e 1
0 g 2
0 p 3
1 c 1
1 x 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句