Pandas 记录具有特定值的列的名称,并在单个字符串中连接
我有一个数据帧,它只包含1和0,这是一些模拟的结果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
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)