pandas - 重复一组行(数据框)并向每组添加一个字符串
问题描述
我有两个 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
解决方案
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
推荐阅读
- python - 解决烧瓶和八度音程的多个问题
- sql - Oracle SQL 在日期之间以月为单位分配金额
- c# - 从 mapbox unity 获取当前位置
- javascript - 带有 React 的会话表单。如何进行多项选择?
- python - Python中格式\x123的字符串解码
- reactjs - 在 react-awesome-query-builder 中显示选择的搜索选项
- algorithm - 给定 2D 矩阵,找出矩阵中存在的连接 1 的岛的数量
- php - Laravel 7:MariaDB 与 Redis 结合,但 Redis 在处理大对象时表现较慢
- css - 如何将引导表单控制填充设置为 0 px
- oracle - 如何在 oracle Apex 中创建按钮验证?