Pandas 记录具有特定值的列的名称,并在单个字符串中连接

Pandas 记录具有特定值的列的名称,并在单个字符串中连接,pandas,dataframe,Pandas,Dataframe,我有一个数据帧,它只包含1和0,这是一些模拟的结果 data = {'Input_A':[1, 0, 0, 1], 'Input_B':[1, 0, 1, 0], 'Input_C':[0, 0, 0, 1], 'Output_A':[1, 1, 1, 0], 'Output_B':[1, 0, 1, 1], 'Output_C':[1, 0, 0, 0]} df = pd.DataFrame(data

我有一个数据帧,它只包含1和0,这是一些模拟的结果

data = {'Input_A':[1, 0, 0, 1], 
        'Input_B':[1, 0, 1, 0],
        'Input_C':[0, 0, 0, 1], 
        'Output_A':[1, 1, 1, 0],
        'Output_B':[1, 0, 1, 1], 
        'Output_C':[1, 0, 0, 0]} 
  
df = pd.DataFrame(data) 
我想为每一行创建一个标签,以其各自的活动输入命名,以便将其用于我想要的一些可视化

例如,对于df的第一行,标签将是“A+B”,第二行是“-”,第三行是“B”,依此类推

输入_A 输入_B 输入法 输出_A 输出 输出量 标签 1. 1. 0 1. 1. 1. A+B 0 0 0 1. 0 0 没有一个 0 1. 0 1. 1. 0 B 1. 0 1. 0 1. 0 A+C
如果列具有示例中显示的模式,则可以在过滤以
Input开始的列后使用
df.dot

cols = df.columns[df.columns.str.startswith("Input_")]
df['Label'] = df[cols].dot(cols.str.split("_").str[1]+'+').str[:-1]


我试图找到一个更容易理解(尽管更长)的答案:


请添加您的预期输出以及您自己的代码。这工作完美无瑕!非常感谢你!你能解释一下点函数的作用吗?@Rina dot是矩阵乘法。在这里,我们在带有are1的行之间取一个点积,0被忽略,因为它是False,并且返回后续的列名,并附加一个充当分隔符的
+
print(df)

   Input_A  Input_B  Input_C  Output_A  Output_B  Output_C Label
0        1        1        0         1         1         1   A+B
1        0        0        0         1         0         0      
2        0        1        0         1         1         0     B
3        1        0        1         0         1         0   A+C
input_cols = [col for col in df.columns if col.startswith('Input')]
input_values = [col.split('_')[1] for col in input_cols]
col_value_map = dict(zip(input_cols, input_values))

def build_label(row):
    inputs = map(col_value_map.get, row.index)
    inputs_one = [name for name, value in zip(inputs, row) if value == 1]
    if inputs_one:
        return '+'.join(inputs_one)
    return None

df[input_cols].apply(build_label, axis=1)