pandas 按值切片
pandas slicing by value
Python 3.6 pandas 1.1.2 windows 10
我正在尝试找到一种可扩展的方法来根据值选择对 pandas DataFrame 进行切片。示例:
df = pd.DataFrame({'c1': ['a', 'c', 'c'],
'c2': ['c', 'c', 'c'],
'c3': ['b', 'c', 'c'],})
给出:
c1 c2 c3
0 a c b
1 c c c
2 c c c
如果列 c1 和 c3 都包含“a”或“b”,现在对 DataFrame 进行切片:
criteria = ['a', 'b']
new_df = df[((df.c1 == criteria[0]) | (df.c1 == criteria[1])) & \
((df.c3 == criteria[0]) | (df.c3 == criteria[1]))]
给出:
c1 c2 c3
0 a c a
我遇到的问题是,如果我的标准是比这 2 个元素('a'、'b')更长的列表,那么该过程将变得难以扩展。
你可以试试isin
,然后all
:
# more values here
vals = ['a','b', 'e', 'f', 'g', 'h']
df[df[['c1','c3']].isin(vals).all(1)]
输出:
c1 c2 c3
0 a c b
Python 3.6 pandas 1.1.2 windows 10
我正在尝试找到一种可扩展的方法来根据值选择对 pandas DataFrame 进行切片。示例:
df = pd.DataFrame({'c1': ['a', 'c', 'c'],
'c2': ['c', 'c', 'c'],
'c3': ['b', 'c', 'c'],})
给出:
c1 c2 c3
0 a c b
1 c c c
2 c c c
如果列 c1 和 c3 都包含“a”或“b”,现在对 DataFrame 进行切片:
criteria = ['a', 'b']
new_df = df[((df.c1 == criteria[0]) | (df.c1 == criteria[1])) & \
((df.c3 == criteria[0]) | (df.c3 == criteria[1]))]
给出:
c1 c2 c3
0 a c a
我遇到的问题是,如果我的标准是比这 2 个元素('a'、'b')更长的列表,那么该过程将变得难以扩展。
你可以试试isin
,然后all
:
# more values here
vals = ['a','b', 'e', 'f', 'g', 'h']
df[df[['c1','c3']].isin(vals).all(1)]
输出:
c1 c2 c3
0 a c b