如何在pandas中的字符串列表中的每个字符串上迭代代码



我有一个对象列表,我想检查和扩展。具体来说,我的初始数据帧是

Name        
1   object1 
7   object2 
6   object3 
4   object4 
0   object5 
8   object6 

我将以下函数应用于我的数据框架:

def example(file):

...
my_list2 = []
for u in file['Name']:
try:
minim = ...
except:
minim = 'NA'
my_list2.append(minim)
file['Others'] = my_list2
return file

创建一个新的列Others,看起来像:

Name         Others
1   object1 [object4, object3, object22]
7   object2 [object1]
6   object3 [object1]
...

我想做的是将该函数也应用于Others列中的列表中的每个元素。这意味着我应该为第一个列表中的每个变量运行它,即

[object4, object3, object22]

为了添加到我的初始数据框一行(object22,因为它不包括在Name列),并有这样的东西

Name         Others
1   object1 [object4, object3, object22]
7   object2 [object1]
6   object3 [object1]
...
10   object22 [object23, object40, object1]

当然,当Others中的所有元素都在Name列中时,循环停止运行。objectX在本例中只是一个虚拟名称:Name中的变量名称可以是dog,或mom,或其他任何名称。

我不知道如何运行该函数,以便将其应用于Others列下的列表中的元素,以附加原始数据集中的结果。

如果您需要更多的信息,请告诉我。

概要:

我需要运行函数

  • 为列名中的对象。这将为每个对象生成一个字符串列表(最终也是空列表);
  • 对于字符串列表中的每个对象:这会在Name列
  • 中创建新行
  • 用于Name
  • 中添加的新对象

这个答案只是解决如何提取新的Name来处理。

你可以使用' explosion '将列表的元素变成行:

data = [{'Name': 'object1', 'Others': ['object4', 'object3', 'object22']},
{'Name': 'object2', 'Others': ['object1']},
{'Name': 'object3', 'Others': ['object1']}]
df = pd.DataFrame(data)
print(df)
Name                        Others
0  object1  [object4, object3, object22]
1  object2                     [object1]
2  object3                     [object1]
df_exp = df.explode('Others')
print(df_exp)
Name    Others
0  object1   object4
0  object1   object3
0  object1  object22
1  object2   object1
2  object3   object1
objn = pd.Series(list(set(df_exp['Others']) - set(df['Name'])), name='Name')
print(objn)
0     object4
1    object22
Name: Name, dtype: object

然后对objn应用函数创建Others内容。将新数据框指定为dfn

df = df.append(dfn)

重复爆炸并应用func直到len(objn) == 0

最新更新