的简单的解决你的问题是解压缩从iterrows
来的元组
k = 1
l = 0
for i, row in df.iterrows():
if k % 3 == 0:
result.loc[l, 'H2'] = row['Filename']
l += 1
elif k % 2 == 0:
result.loc[l, 'H1'] = row['Filename']
else:
result.loc[l, 'V'] = row['Filename']
k += 1
对此的改进将使用enumerate
来捕获k
,而无需自行跟踪。
l = 0
for k, (i, row) in enumerate(df.iterrows(), 1):
if k % 3 == 0:
result.loc[l, 'H2'] = row['Filename']
l += 1
elif k % 2 == 0:
result.loc[l, 'H1'] = row['Filename']
else:
result.loc[l, 'V'] = row['Filename']
不过,我不太清楚你在做什么。如果碰巧你试图捕获从第一,第二和第三项开始的每个第三元素,那么你没有完成这个。如果您确信这一逻辑,则忽略以下建议。
pd.concat([df.Filename.iloc[0::3].reset_index(drop=True),
df.Filename.iloc[1::3].reset_index(drop=True),
df.Filename.iloc[2::3].reset_index(drop=True)],
axis=1, keys=['V', 'H1', 'H2'])
或者
df.Filename.groupby(np.arange(df.shape[0]) % 3) \
.apply(pd.Series.reset_index, drop=True) \
.unstack(0).rename(columns={0: 'V', 1: 'H1', 2: 'H2'})