这是我正在工作的示例数据框:
df:
a b c
a1 P1,P3 abc
a2 P2,P4 def
a3 P2 ghi `
我想在一个数据框中的多个列上应用过滤器,这些列中有逗号分隔的值。
过滤器数据采用以下称为series
的{{1}}形式:
df_filters
过滤器数据在第一列中包含数据帧df_filters:
a [a1]
b [P1, P4]`
作为column name
,在第二列中包含string
作为filter values
。
使用上面的list
过滤数据帧df_filters
并获得以下结果:
df1
结论:Result1:
a b c
a1 P1,P3 abc
a2 P2,P4 def `
中的列a
仅考虑值df1
的行,列a1
仅考虑包含值b
的行,并且P1
。在P4
列的第1行中,b
和P1
是两个不同的值,以逗号分隔。
反正我可以为P3
实现以上Result
吗?
有关类似情况的参考,请查看以下链接: Apply a list of filters to a dataframe coming from a list using pandas
答案 0 :(得分:1)
使用:
byte[] sig = privKey.SignData(Encoding.ASCII.GetBytes(signingString), CryptoConfig.MapNameToOID("SHA256"), RSASignaturePadding.Pkcs1);
答案 1 :(得分:0)
对于每个值,您要检查它是否存在于相应的df_filters
列表中。由于该列可以包含列表或单个项目,因此也需要对此进行检查。
由于这种情况有点复杂,因此我将此逻辑移到了单独的函数_filter_func
上。
def _filter_func(x, f_vals_set):
if not isinstance(x, list):
# This is needed becouse values in dataframe could be single object or a list of objects
x = [x]
# Check if the there is any matching value in filter set
matching_vals = f_vals_set.intersection(x)
return len(matching_vals) > 0
conditions = [df[col].apply(lambda x: _filter_func(x, set(f_vals))) for col, f_vals in filters.items()]
df.loc[pd.np.logical_or.reduce(conditions)]