gpt4 book ai didi

python - 无法将多索引中的条件列与同一索引对齐

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:01 25 4
gpt4 key购买 nike

我正在尝试添加一个条件列,它查看 col1 并在等于“Hello”时返回 True,否则返回 False。问题是它似乎是根据 col1 的字母顺序放置它

df = pd.DataFrame({'col1': ['A','B','Hello','C'],'col2':['foo','bar','baz','foz'], 'col3 ':['3','1','3','4']})
df.set_index(['col1', 'col2'],inplace=True)

df['col4'] = df.index.levels[0].str.contains('Hello')

它回来了

           col3    col4
col1 col2
A foo 3 False
B bar 1 False
Hello baz 3 False
C foz 4 True

但我希望它返回

           col3    col4
col1 col2
A foo 3 False
B bar 1 False
Hello baz 3 True
C foz 4 False

最佳答案

使用eval:

df['col4'] = df.eval('col1 == "Hello"')
df

col3 col4
col1 col2
A foo 3 False
B bar 1 False
Hello baz 3 True
C foz 4 False

对于部分字符串搜索,使用 str.containsengine='python'

df['col4'] = df.eval('col1.str.contains("Hello")', engine='python')
df

col3 col4
col1 col2
A foo 3 False
B bar 1 False
Hello baz 3 True
C foz 4 False

另一个选项是查询MultiIndex.get_level_values:

df['col4'] = df.index.get_level_values('col1') == 'Hello'
df

col3 col4
col1 col2
A foo 3 False
B bar 1 False
Hello baz 3 True
C foz 4 False

如果这是部分字符串搜索问题,请在此处使用 str.contains:

df['col4'] = df.index.get_level_values('col1').str.contains('Hello')
df

col3 col4
col1 col2
A foo 3 False
B bar 1 False
Hello baz 3 True
C foz 4 False

最后,如果您正在执行相等比较(而不是部分字符串匹配),您可以使用 locpd.IndexSlice 进行分配:

df['col4'] = False
df.loc[pd.IndexSlice['Hello', :], 'col4'] = True
df

col3 col4
col1 col2
A foo 3 False
B bar 1 False
Hello baz 3 True
C foz 4 False

关于python - 无法将多索引中的条件列与同一索引对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55349264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com