我觉得我问的是一个非常愚蠢的问题已被问过一千次,但我似乎无法在任何地方找到它。我可能使用了错误的术语。
无论如何,我有一个熊猫框架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
但这似乎不起作用。还有另一种方法来过滤'列数值的数据框?
答案 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
虽然最后一个似乎效率低下