Python - Pandas - 将横截面与 str.contains 结合使用
Python - Pandas - Using Cross-section in conjunction with str.contains
有没有办法使用pandas的横截面法:
import numpy as np
import pandas as pd
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
df.xs('bar',level=0)
结合str.contains方法:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.contains.html
objective 正在选择特定级别的数据,但仅基于包含给定字符串的级别。
在这种特定情况下,它会是这样的:
df.xs(df.str.contains('ba'),level=0)
在这种特定情况下,它应该 return (这是一个例子,显然在这里,做 'bar' 或 'ba' 会 return相同的输出)
0 1 2 3
one -0.148672 1.025935 0.948375 -0.214719
two 0.066008 0.429827 0.621165 -0.534449
使用boolean indexing
with get_level_values
:
df = df[df.index.get_level_values(0).str.contains('ba')]
print (df)
0 1 2 3
bar one -0.556376 -0.295627 0.618673 -0.409434
two 0.107020 -1.143460 -0.145909 0.017417
baz one 0.117667 -0.301128 0.880918 -1.027282
two 2.287448 1.528137 -1.528636 0.052728
详情:
print (df.index.get_level_values(0))
Index(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], dtype='object')
print (df.index.get_level_values(0).str.contains('ba'))
[ True True True True False False False False]
有没有办法使用pandas的横截面法:
import numpy as np
import pandas as pd
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
df.xs('bar',level=0)
结合str.contains方法:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.contains.html
objective 正在选择特定级别的数据,但仅基于包含给定字符串的级别。
在这种特定情况下,它会是这样的:
df.xs(df.str.contains('ba'),level=0)
在这种特定情况下,它应该 return (这是一个例子,显然在这里,做 'bar' 或 'ba' 会 return相同的输出)
0 1 2 3
one -0.148672 1.025935 0.948375 -0.214719
two 0.066008 0.429827 0.621165 -0.534449
使用boolean indexing
with get_level_values
:
df = df[df.index.get_level_values(0).str.contains('ba')]
print (df)
0 1 2 3
bar one -0.556376 -0.295627 0.618673 -0.409434
two 0.107020 -1.143460 -0.145909 0.017417
baz one 0.117667 -0.301128 0.880918 -1.027282
two 2.287448 1.528137 -1.528636 0.052728
详情:
print (df.index.get_level_values(0))
Index(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], dtype='object')
print (df.index.get_level_values(0).str.contains('ba'))
[ True True True True False False False False]