根据其他列值编辑 pandas 数据框中的值



这里有一个例子:

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

使用idxmaxaxis=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

最新更新