根据其他数据框按组创建新数据框

时间:2017-07-14 14:09:00

标签: python pandas dataframe

我在使用大熊猫方面没有多少经验。我有一个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数据帧行的函数。

3 个答案:

答案 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。第一列是数据框索引,可以根据需求允许删除/忽略。