【问题标题】:Adding new row in dataframe with conditional split of previous row在数据框中添加新行并有条件拆分前一行
【发布时间】:2019-04-28 21:48:58
【问题描述】:
如果特定列值中存在“或”条件,则它必须通过数据框中的先前值拆分并创建新行。尝试拆分和连接无法获得所需的输出,非常感谢任何帮助
输入
col1 col2 col3 col4
0 x bca or cba value1 or null x1 or x2
1 y bca value2 x1
输出
col1 col2 col3 col4
0 x bca value1 x1
1 x cba null x2
2 y bca value2 x1
【问题讨论】:
标签:
python
pandas
python-2.7
numpy
dataframe
【解决方案1】:
用途:
cols = df.columns
df = (df.join(df.pop('col2')
.str.split(' or ', expand=True)
.stack()
.reset_index(level=1, drop=True)
.rename('col2'))
).reset_index(drop=True).reindex(columns=cols)
print (df)
col1 col2 col3
0 x bca value1
1 x cba value1
2 y bca value2
解释:
- 第一个
pop 列用于提取split 列与expand = True 到DataFrame
- 由
stack重塑
-
reset_index 用于删除 MultiIndex 的第一级
-
rename Series 按新列名
- 然后
join 到原来的df
- 函数
reset_index 是唯一索引所必需的
- 最后一个
reindex 用于相同顺序的列名称
编辑:
df = (df.set_index('col1')
.stack()
.str.split(' or ', expand=True)
.stack()
.unstack(1)
.reset_index(level=1, drop=True)
.reset_index()
)
print (df)
col1 col2 col3 col4
0 x bca value1 x1
1 x cba null x2
2 y bca value2 x1
【讨论】:
-
-
@AshokkumarP - 欢迎您!如果我的回答有帮助,请不要忘记accept。谢谢。
-
-
-