我在使用大熊猫方面没有多少经验。我有一个pandas数据帧,如下所示。
df = pd.DataFrame({ 'A' : [1,2,1],
'start' : [1,3,4],
'stop' : [3,4,8]})
我想创建一个新的数据框,遍历行并附加到结果数据框。例如,从输入数据帧的第1行 - 生成数字序列[1,2,3]和相应列到命名1
A seq
1 1
1 2
1 3
2 3
2 4
1 4
1 5
1 6
1 7
1 8
到目前为止,我已经设法确定用于迭代pandas数据帧行的函数。
答案 0 :(得分:3)
这是申请的一种方式:
(df.set_index('A')
.apply(lambda x: pd.Series(np.arange(x['start'], x['stop'] + 1)), axis=1)
.stack()
.to_frame('seq')
.reset_index(level=1, drop=True)
.astype('int')
)
Out:
seq
A
1 1
1 2
1 3
2 3
2 4
1 4
1 5
1 6
1 7
1 8
答案 1 :(得分:2)
如果你想使用循环。
In [1164]: data = []
In [1165]: for _, x in df.iterrows():
...: data += [[x.A, y] for y in range(x.start, x.stop+1)]
...:
In [1166]: pd.DataFrame(data, columns=['A', 'seq'])
Out[1166]:
A seq
0 1 1
1 1 2
2 1 3
3 2 3
4 2 4
5 1 4
6 1 5
7 1 6
8 1 7
9 1 8
答案 2 :(得分:0)
为了添加上面的答案,这里有一个方法,它定义了一个函数,用于将显示的数据框输入解释为海报想要的形式:
def gen_df_permutations(perm_def_df):
m_list = []
for i in perm_def_df.index:
row = perm_def_df.loc[i]
for n in range(row.start, row.stop+1):
r_list = [row.A,n]
m_list.append(r_list)
return m_list
调用它,引用规范数据框:
gen_df_permutations(df)
或者可选地将其包装在数据帧创建函数中以返回最终的数据帧输出:
pd.DataFrame(gen_df_permutations(df),columns=['A','seq'])
A seq
0 1 1
1 1 2
2 1 3
3 2 3
4 2 4
5 1 4
6 1 5
7 1 6
8 1 7
9 1 8
N.B。第一列是数据框索引,可以根据需求允许删除/忽略。