仅使用Pandas数据帧的一部分

时间:2016-08-08 17:58:56

标签: python pandas filter

我觉得我问的是一个非常愚蠢的问题已被问过一千次,但我似乎无法在任何地方找到它。我可能使用了错误的术语。

无论如何,我有一个熊猫框架df。我想使用这个数据帧的一部分。更具体地说,我想在循环中使用它:

unique_values = df['my_column'].tolist()
unique_values = list(set(unique_values))

for value in unique_values:
    tempDf = df[df['my_column] == value]
    # Do stuff with tempDf

但这似乎不起作用。还有另一种方法来过滤'列数值的数据框?

2 个答案:

答案 0 :(得分:3)

改为使用df.groupby

for value, tempDf in df.groupby('my_column'):
    # Do stuff with tempDf

在修复'my_column周围缺少的单引号后,您的代码确实有用,但速度比使用df.groupby慢。

在循环中评估df['my_column'] == value会强制Pandas在循环的每次迭代中运行len(df)比较。 df.groupby将DataFrame分区为一组,一次通过DataFrame。

答案 1 :(得分:0)

for value in unique_values:
    tempDf = df.where(df['column_name'] == value)
    # Do stuff with tempDf

此外,您可以使用查询语句

for value in unique_values:
     tempDf = df.query('(column_name == value)')
     # Do stuff with tempDf

或者你可以做到

for value in unique_values:
         tempDf = df[df['my_column] == value]
         tempDf = tempDf .query('(value == True)')
         # Do stuff with tempDf

虽然最后一个似乎效率低下