Python pandas迭代数据帧

时间:2015-07-23 00:25:24

标签: python numpy pandas bigdata

我正在尝试与Pandas合作,我需要一个解决方案来解决以下问题。

我有一个包含如下列的数据集:

X1 Y1 Z1 1.....(bunch of other columns)
X1 Y1 Z1 2.....(bunch of other columns)
X1 Y1 Z1 3.....(bunch of other columns)
X2 Y2 Z2 1.....(bunch of other columns)
X2 Y2 Z2 2.....(bunch of other columns)
X2 Y2 Z2 3.....(bunch of other columns)
X2 Y2 Z2 4.....(bunch of other columns)

我需要通过考虑前三列作为关键字来处理数据集。所以我需要首先考虑与X1 Y1 Z1相关联的所有行,处理其中的一堆列,然后转到下一个块X2 Y2 Z2。首先是

X1 Y1 Z1 1.....(bunch of other columns)
X1 Y1 Z1 2.....(bunch of other columns)
X1 Y1 Z1 3.....(bunch of other columns) 

接着是

X2 Y2 Z2 1.....(bunch of other columns)
X2 Y2 Z2 2.....(bunch of other columns)
X2 Y2 Z2 3.....(bunch of other columns)
X2 Y2 Z2 4.....(bunch of other columns)

我正在寻找pandas或numpy的解决方案来处理这个数据集。我处理了数百万行,所以大熊猫的iterrows()会很慢。

2 个答案:

答案 0 :(得分:1)

如果您的数据已加载到包含XYZcol1col2列的DataFrame for concat_XYZ, df_group in df.groupby(df['X']+df['Y']+df['Z']): # process df_group # .... 中。 ..,然后你可以循环群组' /' chunks'数据如下:

df_group

根据您的问题,每个X都是一个块(或一个DataFrame)。 YZ和{{1}}列中字符串的串联用于唯一标识组。

答案 1 :(得分:1)

如果你的处理是相同的,但你需要按组分开,那么编写你的函数并使用groupby.apply()它将在应用你的功能组之后返回数据帧。

def do_stuff(DataFrame):
    DataFrame['stuff'] = DataFrame['col1'] + DataFrame['col2'] + DataFrame['col3']
    return DataFrame

new_df = original_df.groupby(['col1', 'col2', 'col3'], as_index=False).apply(do_stuff)