Python 从格式列表生成字符串

Python 从格式列表生成字符串,python,python-3.x,pandas,Python,Python 3.x,Pandas,假设我有一个类似这样的名字的df: name first_name middle_name last_name John Doe John D Doe Richard Cohen Richard NaN Cohen Molly Claire Smith Molly Claire Smith 以及一个用户名样式格式列表,如下所示: first_name+la

假设我有一个类似这样的名字的df:

name                first_name middle_name last_name
John Doe            John       D           Doe
Richard Cohen       Richard    NaN         Cohen
Molly Claire Smith  Molly      Claire      Smith
以及一个用户名样式格式列表,如下所示:

first_name+last_name
first_initial+last_name
first_initial+last_initial
first_name+last_initial
name                first_name middle_name last_name permutation1 permutation2 permutation3 ...
John Doe            John       D           Doe       JohnDoe      JD           JDoe 
Richard Cohen       Richard    NaN         Cohen     RichardCohen RC           RCohen
Molly Claire Smith  Molly      Claire      Smith     MollySmith   MS           MSmith
是否有一种更优雅的方式为每个人生成所有可能的用户名,而不是:
df['user1']=('first_name'+'last_name)
以此类推,以获得类似以下内容的输出:

first_name+last_name
first_initial+last_name
first_initial+last_initial
first_name+last_initial
name                first_name middle_name last_name permutation1 permutation2 permutation3 ...
John Doe            John       D           Doe       JohnDoe      JD           JDoe 
Richard Cohen       Richard    NaN         Cohen     RichardCohen RC           RCohen
Molly Claire Smith  Molly      Claire      Smith     MollySmith   MS           MSmith

以下是在中使用自定义函数的方法:


首先让我们去掉名称列

name_cols = [col for col in df.columns if col.endswith('_name')]
然后我们删除这些列的
NaN

df[name_cols] = df[name_cols].fillna('')
现在我们循环查找所有组合。填充代码是可以改进的,但您应该明白这一点

来自itertools导入组合的

对于范围(2,len(name_cols)+1)中的set_size:#我们需要至少2列的组合
对于组合中的子集(名称、大小):
键=''.'连接(子集)
df[键]=''
对于子集中的i:
df[key]=df[key]+''+df[i]
df[key]=df[key].str.strip()
>>打印(df)
姓名姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏姓氏
约翰·多伊约翰·多伊约翰·多伊约翰·多伊约翰·多伊
1理查德·科恩理查德·科恩理查德·科恩理查德·科恩理查德·科恩
2莫莉·克莱尔·史密斯莫莉·克莱尔·史密斯莫莉·克莱尔·史密斯克莱尔·史密斯莫莉·克莱尔·史密斯

能否提供一个包含输入和所需输出的示例?您希望格式如何?一列清单?