Python pandas 遍历数据框
Python pandas iterate through dataframe
我正在尝试使用 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 中寻找解决方案来处理此数据集。我处理数百万行,所以 pandas 的 iterrows()
会很慢。
如果您的数据加载到具有列 X
、Y
、Z
、col1
、col2
的 DataFrame df
...., 然后你可以遍历数据的 'groups'/'chunks' 如下:
for concat_XYZ, df_group in df.groupby(df['X']+df['Y']+df['Z']):
# process df_group
# ....
每个 df_group
都是一个块(或本身就是一个 DataFrame),正如您在问题中所希望的那样。 X
、Y
和 Z
列中的字符串的串联用于唯一标识组。
如果您的处理是相同的,但您需要将它们按组分开,那么编写您的函数并使用 groupby.apply()
它会 return 明智地应用您的函数组后的数据框。
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)
我正在尝试使用 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 中寻找解决方案来处理此数据集。我处理数百万行,所以 pandas 的 iterrows()
会很慢。
如果您的数据加载到具有列 X
、Y
、Z
、col1
、col2
的 DataFrame df
...., 然后你可以遍历数据的 'groups'/'chunks' 如下:
for concat_XYZ, df_group in df.groupby(df['X']+df['Y']+df['Z']):
# process df_group
# ....
每个 df_group
都是一个块(或本身就是一个 DataFrame),正如您在问题中所希望的那样。 X
、Y
和 Z
列中的字符串的串联用于唯一标识组。
如果您的处理是相同的,但您需要将它们按组分开,那么编写您的函数并使用 groupby.apply()
它会 return 明智地应用您的函数组后的数据框。
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)