您能否让我知道如何将multindex数据框中的行的十进制转换为二进制值?
下面是我使用的数据框
from pandas import Series, DataFrame
raw_data = {'Function': ['env', 'env', 'env', 'func1', 'func1', 'func1'],
'Type': ['In', 'In', 'In', 'In','In', 'out'],
'Name': ['Volt', 'Temp', 'BD#', 'Name1','Name2', 'Name3'],
'Val1': ['Max', 'High', '1', '3', '5', '6'],
'Val2': ['Typ', 'Mid', '2', '4', '7', '6'],
'Val3': ['Min', 'Low', '3', '3', '6', '3'],
'Val4': ['Max', 'High', '4', '3', '9', '4'],
'Val5': ['Max', 'Low', '5', '3', '4', '5'] }
df = DataFrame(raw_data)
df= df.set_index(["Function", "Type","Name"])
print (df)
下面是打印的数据框
Val1 Val2 Val3 Val4 Val5
Function Type Name
env In Volt Max Typ Min Max Max
Temp High Mid Low High Low
BD# 1 2 3 4 5
func1 In Name1 3 4 3 3 3
Name2 5 7 6 9 4
out Name3 6 6 3 4 5
我想将多索引数据框中的行(func1-In-Name1,Name2)的十进制转换为二进制值。
以下是我想要的df。
Val1 Val2 Val3 Val4 Val5
Function Type Name
env In Volt Max Typ Min Max Max
Temp High Mid Low High Low
BD# 1 2 3 4 5
func1 In Name1 11 100 11 11 11
Name2 101 111 110 1001 100
out Name3 6 6 3 4 5
我试图获得正确的结果,但失败了。 TT
请让我知道如何简单地解决它。
答案 0 :(得分:1)
使用MultiIndex.get_level_values
创建条件,链接在一起并按f-string
s设置新值:
m1 = df.index.get_level_values(0) == 'func1'
m2 = df.index.get_level_values(1) == 'In'
df[m1 & m2] = df[m1 & m2].astype(int).applymap(lambda x: f'{x:b}')
print (df)
Val1 Val2 Val3 Val4 Val5
Function Type Name
env In Volt Max Typ Min Max Max
Temp High Mid Low High Low
BD# 1 2 3 4 5
func1 In Name1 11 100 11 11 11
Name2 101 111 110 1001 100
out Name3 6 6 3 4 5
答案 1 :(得分:1)
通过创建数据框的掩码:
mask = ((df.index.get_level_values('Function') == 'func1')&
(df.index.get_level_values('Type') == 'In')&
(df.index.get_level_values('Name').isin(['Name1', 'Name2'])))
df[mask] = df[mask].astype(int).applymap(lambda x: format(x, 'b'))
print(df[mask])
Val1 Val2 Val3 Val4 Val5
Function Type Name
env In Volt Max Typ Min Max Max
Temp High Mid Low High Low
BD# 1 2 3 4 5
func1 In Name1 11 100 11 11 11
Name2 101 111 110 1001 100
out Name3 6 6 3 4 5