Python 如何为表中列中的每个逗号分隔值创建新行
我有这样一个数据帧:Python 如何为表中列中的每个逗号分隔值创建新行,python,pandas,Python,Pandas,我有这样一个数据帧: text category sfsd sgvv abc,xyz zydf sefs sdfsd yyy dfsd dsrgd dggr xyz eter vxg wfe abc dfvf ertet abc,xyz text category sfsd sgvv abc sf
text category
sfsd sgvv abc,xyz
zydf sefs sdfsd yyy
dfsd dsrgd dggr xyz
eter vxg wfe abc
dfvf ertet abc,xyz
text category
sfsd sgvv abc
sfsd sgvv xyz
zydf sefs sdfsd yyy
dfsd dsrgd dggr xyz
eter vxg wfe abc
dfvf ertet abc
dfvf ertet abc
我想要这样的输出:
text category
sfsd sgvv abc,xyz
zydf sefs sdfsd yyy
dfsd dsrgd dggr xyz
eter vxg wfe abc
dfvf ertet abc,xyz
text category
sfsd sgvv abc
sfsd sgvv xyz
zydf sefs sdfsd yyy
dfsd dsrgd dggr xyz
eter vxg wfe abc
dfvf ertet abc
dfvf ertet abc
基本上,在类别
列中为每两个或更多类别创建一个新行。使用(熊猫0.25+):
对于较旧版本,首先用于非分隔列,然后通过和重塑,最后-首先用于删除第二级多索引
,然后用于将索引转换为列:
df1 = (df.set_index('text')['category']
.str.split(',', expand=True)
.stack()
.reset_index(level=1, drop=True)
.reset_index(name='category'))
print (df1)
text category
0 sfsd sgvv abc
1 sfsd sgvv xyz
2 zydf sefs sdfsd yyy
3 dfsd dsrgd dggr xyz
4 eter vxg wfe abc
5 dfvf ertet abc
6 dfvf ertet xyz
链接到,请为您的数据帧尝试以下代码:
我们可以先拆分列,展开它,堆叠它,然后将它连接回原始df,如下所示:
对于更旧的版本,请尝试使用
set\u index
+stack
+str.split
+unstack
+reset\u index
:
print(df.set_index('text')
.stack()
.str.split(', ', expand=True)
.stack()
.unstack(-2)
.reset_index(-1, drop=True)
.reset_index())
下面将给出您需要的输出。假设df是您的数据集名称
new_df_skel = dict()
new_df_skel['text'] = list()
new_df_skel['category'] = list()
for index,item in df.iterrows():
item = dict(item)
unref_cat = item['category']
if "," in unref_cat:
for strip in unref_cat.split(','):
new_df_skel['category'].append(strip)
new_df_skel['text'].append(item['text'])
else:
new_df_skel['category'].append(strip)
new_df_skel['text'].append(unref_cat)
new_dataset = pd.DataFrame(new_df_skel)
祝你今天愉快 对不起,好像有点不对劲。它正在创建比预期多得多的行。在我最初的DF中,我有多个列,而不仅仅是“文本”