向量化函数以使用 Pandas 复制行
Vectorizing a Function to Replicate Rows with Pandas
上下文:
我有一个包含一列的 DataFrame 和一个根据“计数”列中的数字复制一行的函数。在处理较大的数据集时,我当前的方法非常慢:
def replicate_row(df):
for i in range(len(df)):
row = df.iloc[i]
if row['count']>0:
rep = int(row['count'])-1
if rep != 0:
full_df = full_df.append([row]*rep, ignore_index=True)
我正在尝试弄清楚如何更快地将此函数向量化为 运行,到目前为止发现:
def vector_function(
pandas_series: pd.Series) -> pd.Series:
scaled_series = pandas_series['count'] - 1
*** vectorized replication code here ? ***
return scaled_series
示例数据
Name Age Gender Count
Jen 25 F 3
Paul 30 M 2
DF 的预期结果为:
Name Age Gender
Jen 25 F
Jen 25 F
Jen 25 F
Paul 30 M
Paul 30 M
尝试使用 pd.Index.repeat
:
df = f.loc[df.index.repeat(df['Count'])].reset_index(drop=True).drop('Count', axis=1)
输出:
>>> df
Name Age Gender
0 Jen 25 F
1 Jen 25 F
2 Jen 25 F
3 Paul 30 M
4 Paul 30 M
上下文:
我有一个包含一列的 DataFrame 和一个根据“计数”列中的数字复制一行的函数。在处理较大的数据集时,我当前的方法非常慢:
def replicate_row(df):
for i in range(len(df)):
row = df.iloc[i]
if row['count']>0:
rep = int(row['count'])-1
if rep != 0:
full_df = full_df.append([row]*rep, ignore_index=True)
我正在尝试弄清楚如何更快地将此函数向量化为 运行,到目前为止发现:
def vector_function(
pandas_series: pd.Series) -> pd.Series:
scaled_series = pandas_series['count'] - 1
*** vectorized replication code here ? ***
return scaled_series
示例数据
Name Age Gender Count
Jen 25 F 3
Paul 30 M 2
DF 的预期结果为:
Name Age Gender
Jen 25 F
Jen 25 F
Jen 25 F
Paul 30 M
Paul 30 M
尝试使用 pd.Index.repeat
:
df = f.loc[df.index.repeat(df['Count'])].reset_index(drop=True).drop('Count', axis=1)
输出:
>>> df
Name Age Gender
0 Jen 25 F
1 Jen 25 F
2 Jen 25 F
3 Paul 30 M
4 Paul 30 M