Python 如何创建一个新列,根据这些列的条件连接列索引
我试图将行条件为true的索引列合并到一个新列中 示例数据帧 所有者 鸟 猫 狗 鱼 奥利维亚 真的 假的 假的 假的 诺亚 真的 真的 真的 真的 艾玛 假的 真的 假的 真的 利亚姆 假的 假的 真的 真的 尝试:Python 如何创建一个新列,根据这些列的条件连接列索引,python,pandas,dataframe,Python,Pandas,Dataframe,我试图将行条件为true的索引列合并到一个新列中 示例数据帧 所有者 鸟 猫 狗 鱼 奥利维亚 真的 假的 假的 假的 诺亚 真的 真的 真的 真的 艾玛 假的 真的 假的 真的 利亚姆 假的 假的 真的 真的 尝试: df[“Pets”]=df.loc[:,“Bird”:.apply(lambda x:,”.join(x.index[x]),axis=1) 打印(df) 印刷品: 主人鸟猫狗鱼宠物 0奥利维亚真假假假鸟 1诺亚真鸟、猫、狗、鱼 2艾玛假真假猫,鱼 3利亚姆假真狗,鱼 假设这些
df[“Pets”]=df.loc[:,“Bird”:.apply(lambda x:,”.join(x.index[x]),axis=1)
打印(df)
印刷品:
主人鸟猫狗鱼宠物
0奥利维亚真假假假鸟
1诺亚真鸟、猫、狗、鱼
2艾玛假真假猫,鱼
3利亚姆假真狗,鱼
假设这些是布尔值,请与列一起使用
,然后清除后面的逗号:
df['Pets'] = df.iloc[:, 1:].dot(df.columns[1:] + ', ').str.rstrip(', ')
Else通过以下方式将字符串转换为布尔值:
df
:
Owner Bird Cat Dog Fish Pets
0 Olivia True False False False Bird
1 Noah True True True True Bird, Cat, Dog, Fish
2 Emma False True False True Cat, Fish
3 Liam False False True True Dog, Fish
我对您的代码进行了如下调整:
def all_pets(row):
pets = []
if row['Bird'] == 'True':
pets.append('Bird')
if row['Cat'] == 'True':
pets.append('Cat')
if row['Dog'] == 'True':
pets.append('Dog')
if row['Fish'] == 'True':
pets.append('Fish')
return ', '.join(pets)
df['Pets'] = df.apply(lambda row:all_pets(row), axis = 1)
原始函数一次只返回一个字符串,因此我将其更改为返回一个列表,并使用join函数将列表中的所有元素用逗号和空格连接起来
另一种方法是将列表转换为数组,从而可以将列表中的一部分元素子集
pets = np.array(['Bird','Cat', 'Dog', 'Fish'])
df['Pets'] = df[pets].apply(lambda row: ', '.join(pets[np.array(row)=="True"]), axis = 1)
希望这个答案有帮助
pets = np.array(['Bird','Cat', 'Dog', 'Fish'])
df['Pets'] = df[pets].apply(lambda row: ', '.join(pets[np.array(row)=="True"]), axis = 1)