这里有一个例子:
df = pd.DataFrame({
'file':['filename1','filename2','filename3','filename4','filename5'],
'prop1':['True','False','False','True','False'],
'prop2':['False','True','False','False','True'],
'prop3':['False','False','True','False','False']
})
file prop1 prop2 prop3
0 filename1 True False False
1 filename2 False True False
2 filename3 False False True
3 filename4 True False False
4 filename5 False True False
我需要根据 prop1、prop2、prop3 值编辑"文件",如下所示:
file
filename1:prop1
filename2:prop2
filename3:prop3
filename4:prop1
filename5:prop2
如果值是str类型,则应使用更好的bool
类型,因为您不必要地使用了更多内存
您可以使用 eval 转换为布尔值,并使用 for 循环 + 掩码来检查:
for key in df.columns[1:]:
df[key]=df[key].apply(lambda x:eval(x))
df['file'].mask(df[key],df['file']+':'+ key,inplace=True)
print(df)
file prop1 prop2 prop3
0 filename1:prop1 True False False
1 filename2:prop2 False True False
2 filename3:prop3 False False True
3 filename4:prop1 True False False
4 filename5:prop2 False True False
print(df['prop1'])
0 True
1 False
2 False
3 True
4 False
Name: prop1, dtype: bool
使用idxmax
到axis=1
df['file'] = df.file + ':' + df.filter(like='prop').idxmax(1)
file
0 filename1:prop1
1 filename2:prop2
2 filename3:prop3
3 filename4:prop1
4 filename5:prop2