Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为表中列中的每个逗号分隔值创建新行_Python_Pandas - Fatal编程技术网

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中,我有多个列,而不仅仅是“文本”