Python DataFrame:如何基于行的另一个单元格切换单元格值?
我有一份参加聚会的朋友名单:Python DataFrame:如何基于行的另一个单元格切换单元格值?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一份参加聚会的朋友名单: import pandas as pd d = {'name': ['Alice', 'Bob', 'Charlie'], 'is_here': [True, True, False]} df = pd.DataFrame(data=d) 问题:如何切换基于给定名称的是否为布尔值?(例如,如何使切换('Charlie')在我的数据帧中将False转换为True) 我可以使用df[df['name']=='Charlie'].iloc[0]['is_here']]
import pandas as pd
d = {'name': ['Alice', 'Bob', 'Charlie'], 'is_here': [True, True, False]}
df = pd.DataFrame(data=d)
问题:如何切换基于给定名称的是否为布尔值?(例如,如何使切换('Charlie')
在我的数据帧中将False
转换为True
)
我可以使用df[df['name']=='Charlie'].iloc[0]['is_here']]
,获得一个人作为布尔值的状态,但我很难更改df
中的值。您可以使用设置索引+.loc
df.set_index('name',inplace=True)
df.loc['Alice']
Out[164]:
is_here True
Name: Alice, dtype: bool
更新
df.loc[df.name=='Charlie','is_here']=True
df
Out[176]:
is_here name
0 True Alice
1 True Bob
2 True Charlie
更新2
df.loc[df.name=='Charlie','is_here']=~df['is_here']
df
Out[185]:
is_here name
0 True Alice
1 True Bob
2 True Charlie
更新映射
df = df.set_index('name')
df.loc['Charlie', 'is_here'] = ~df.loc['Charlie', 'is_here']
print(df.reset_index())
# name is_here
# 0 Alice True
# 1 Bob True
# 2 Charlie True
查询您的映射
df = df.set_index('name')
df.loc['Charlie', 'is_here'] = ~df.loc['Charlie', 'is_here']
print(df.reset_index())
# name is_here
# 0 Alice True
# 1 Bob True
# 2 Charlie True
从您的数据帧:
ishere = df.set_index('name')['is_here'].get
print(ishere('Alice')) # True
从您的原始词典:
ishere = dict(zip(d['name'], d['is_here'])).get
print(ishere('Alice')) # True
使用异或切换Charlie
解释
只有一个是正确的
异或的真值表
x y x ^ y
0 True True False
1 True False True
2 False True True
3 False False False
所以:
如果x=True
,x^True
的计算结果为False
如果x=False
,x^True
计算结果为True
使用loc
上的^=
,我们将xor
与True
用于切片表示的所有元素,并将结果分配到位