Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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_Dataframe - Fatal编程技术网

Python 如何创建一个新列,根据这些列的条件连接列索引

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利亚姆假真狗,鱼 假设这些

我试图将行条件为true的索引列合并到一个新列中

示例数据帧

所有者 鸟 猫 狗 鱼 奥利维亚 真的 假的 假的 假的 诺亚 真的 真的 真的 真的 艾玛 假的 真的 假的 真的 利亚姆 假的 假的 真的 真的 尝试:

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)