【发布时间】:2017-06-07 16:22:41
【问题描述】:
我正在使用 pandas 数据框,并且正在迭代几列中所有可能的值组合。我使用itertools.combinations 和pandas.Series.unique() 来做到这一点:
query_fields = ['direction','subj_id','speed']
query_items = [df_reps[k].unique() for k in query_fields]
for a in itertools.product(*query_items):
df = df_reps[(df_reps['subj_id']==a[0]) & (df_reps['direction']==a[1]) & (df_reps['speed']==a[2])]
#Do something with df
我想知道是否有更 Pythonic 的方式来压缩我的数据框查询。如果我有更多可能的查询字段,那么这种方法将变得越来越不可用。一种可能的方法是遍历所有字段并单独应用每个查询(如漏斗) - 这可以通过列表理解来完成,例如:
df = df_reps[(df_reps[qf]==a[i]) for qf,i in enumerate(query_fields)] #Doesn't work
pandas 中是否已经存在此功能?
编辑
输入:一个DataFrame 和一个包含标题的列表。
输出:循环或类似循环,选择标题列表指定的列中的每个唯一值组合。
【问题讨论】:
-
你没有使用 pandas.DataFrame.unique,你使用的是 pandas.Series.unique。
标签: python pandas dataframe combinations list-comprehension