首页 > 解决方案 > 如何有效地增加数据帧

问题描述

我有一个如下所示的数据框,

df=pd.DataFrame({'col1':[1,2,3,4,5],'col2':list('abcde')})

我想按其内容的长度复制数据帧。

基本上我想让col1中的每个值都与col2的全部内容相加。

输入:

   col1 col2
0     1    a
1     2    b
2     3    c
3     4    d
4     5    e

输出/输出:

    col1 col2
0      1    a
1      1    b
2      1    c
3      1    d
4      1    e
5      2    a
6      2    b
7      2    c
8      2    d
9      2    e
10     3    a
11     3    b
12     3    c
13     3    d
14     3    e
15     4    a
16     4    b
17     4    c
18     4    d
19     4    e
20     5    a
21     5    b
22     5    c
23     5    d
24     5    e

为此,我使用了这个,

op=[]
for val in df.col1.values:
    temp=df.copy()
    temp['col1']=val
    op.append(temp)
print(pd.concat(op,ignore_index=True))

我想以更好的方式获得准确的输出(不包括循环)

标签: pythonpandas

解决方案


使用交叉连接并过滤必要的列:

df = pd.merge(df.assign(a=1), df.assign(a=1), on='a')[['col1_x','col2_y']]
df = df.rename(columns = lambda x: x.split('_')[0])
print (df)
    col1 col2
0      1    a
1      1    b
2      1    c
3      1    d
4      1    e
5      2    a
6      2    b
7      2    c
8      2    d
9      2    e
10     3    a
11     3    b
12     3    c
13     3    d
14     3    e
15     4    a
16     4    b
17     4    c
18     4    d
19     4    e
20     5    a
21     5    b
22     5    c
23     5    d
24     5    e

推荐阅读