Python:从列表列的值创建新行
我有一个熊猫数据框,看起来像这样:Python:从列表列的值创建新行,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像这样: tags value [tag1, tag2, tag3] 0 [tag2, tag3] 10 [tag1, tag3] 50 ... 在这个数据帧上,我想应用一个函数,对于每行的每个标记,将创建一个新行,其中包含一列“tag”和一列“related_tags”。 以下是我所期望的一个例子: tag value r
tags value
[tag1, tag2, tag3] 0
[tag2, tag3] 10
[tag1, tag3] 50
...
在这个数据帧上,我想应用一个函数,对于每行的每个标记,将创建一个新行,其中包含一列“tag”和一列“related_tags”。
以下是我所期望的一个例子:
tag value related_tags
tag1 0 [tag2, tag3]
tag2 0 [tag1, tag3]
tag3 0 [tag1, tag2]
tag2 10 [tag3]
tag3 10 [tag2]
tag1 50 [tag3]
tag3 50 [tag1]
我熟悉Spark DataFrames,但不熟悉Pandas,有没有一种简单的方法来实现这一点?这是一个问题首先,在分解列表列标记之后,问题就更清楚了
newdf=unnesting(df,['tags']).reset_index()
newdf['related_tags']=newdf['index'].map(df.tags)
newdf['related_tags']=[list(set(y)-{x})for x , y in zip(newdf.tags,newdf.related_tags)]
newdf
Out[48]:
index tags value related_tags
0 0 tag1 0 [tag2, tag3]
1 0 tag2 0 [tag3, tag1]
2 0 tag3 0 [tag2, tag1]
3 1 tag2 10 [tag3]
4 1 tag3 10 [tag2]
数据输入
df=pd.DataFrame({'tags':[['tag1','tag2','tag3'],['tag2','tag3']],'value':[0,10]})
自我定义
这可能有帮助。
def unnesting(df, explode):
idx=df.index.repeat(df[explode[0]].str.len())
df1=pd.concat([pd.DataFrame({x:np.concatenate(df[x].values)} )for x in explode],axis=1)
df1.index=idx
return df1.join(df.drop(explode,1),how='left')