首页 > 解决方案 > 重复一组行(数据框)并向每组添加一个字符串

问题描述

我有两个 DataFrame,一个要重复所有数据以创建一个新的 DataFrame,但每次重复时,一列必须使用来自另一个 DataFrame 的字母来更改其值:

DF1 t1 t2 t3 t4 0 ABC 0 A 1950 1 CDE 1 A 1950 DF2 [P,Q,R] 我想得到 :

DF0 t1 t2 t3 t4 0 ABC 0 A 1950-P 1 CDE 1 A 1950-P 2 XYZ 1 B 1954-Q 3 123 1 C 1954-Q 4 ABC 0 A 1950-R 5 CDE 1 A 1950-R

我努力了 :

TMP = pd.DataFrame()
DF0 = pd.DataFrame()

TMP = DF1['t4']
DF1['t4'] = TMP + ' ' + DF2[0]
DF0 = DF0.append(DF1)

TMP = DF1['t4']
DF1['t4'] = TMP + ' ' + DF2[0]
DF0 = DF0.append(DF1)

但 P 仍处于第二次和第三次迭代中,如下所示:

1   CDE  1   A   1950-P
2   XYZ  1   B   1954-P-Q

标签: pandasdataframe

解决方案


DataFrame.explode对 repat 列表值使用与 (pandas 0.25+) 交叉连接:

df2 = pd.DataFrame({'col':[['P','Q','R']]})
print (df2)
         col
0  [P, Q, R]

df2 = df2.explode('col')
print (df2)
  col
0   P
0   Q
0   R
df = df1.assign(a=1).merge(df2.assign(a=1), on='a')
df['t4'] = df['t4'].astype(str) + '-' + df['col']
print (df)
    t1  t2 t3      t4  a col
0  ABC   0  A  1950-P  1   P
1  ABC   0  A  1950-Q  1   Q
2  ABC   0  A  1950-R  1   R
3  CDE   1  A  1950-P  1   P
4  CDE   1  A  1950-Q  1   Q
5  CDE   1  A  1950-R  1   R

推荐阅读