python - 熊猫如何创建一个带有开始和结束的新数据框,即使在不同的行上
问题描述
我有一个带有 2 列的熊猫数据框。有些MessageID's
结尾在同一行上,它们以NewMessageID
下面索引行 0 中的类似开头。但是其他索引行 2 直到索引行 4 才结束。我正在寻找一种巧妙的方法来简化新数据帧中的输出。
df
MessageID NewMessageID
0 28 10
1 21 9
2 4 18
3 3 6
4 18 22
5 99 102
6 102 118
7 1 20
我正在寻找类似的输出:
df1
Start Finish
0 28 10
1 21 9
2 4 22
3 3 6
4 99 118
5 1 20
解决方案
加入自身,以创建df2
、删除原始行,这些行在df
两列之间具有共同值。保留外部两列df2
并重命名它们以匹配df
并将一列附加到另一列。
df = pd.DataFrame({'MessageID':[28,21,4,3,18,99,102,1],'NewMessageID':[10,9,18,6,22,102,118,20]})
df2 = df.merge(df, left_on='NewMessageID', right_on='MessageID')
df2 = df2[['MessageID_x','NewMessageID_y']]
df2.columns = ['MessageID', 'NewMessageID']
df = df[(~df['MessageID'].isin(df['NewMessageID'].values.tolist())) & (~df['NewMessageID'].isin(df['MessageID'].values.tolist()))]
output = df.append(df2)
MessageID NewMessageID
0 28 10
1 21 9
3 3 6
7 1 20
0 4 22
1 99 118
推荐阅读
- pyomo - Pyomo 赋值以约束 TypeError:插入问题
- python-2.x - 如何为所需的附加输出正确格式化代码?
- php - 如何选择 url 参数?
- c# - 无法从 system.data.common.dbconnection 转换为 system.data、sqlconnection
- vuejs2 - VueJs 避免改变在创建的生命周期钩子上初始化的道具
- java - @Transactional propogation_new 被父事务回滚
- reactjs - React-Redux-Reselect 应用程序的优化问题
- neo4j - 尝试使用 apoc.periodic.iterate 批量删除重复节点。服务器一直超时
- python - 强制 Sphinx 在 Python 文档字符串中解释 Markdown 而不是 reStructuredText
- raspberry-pi - I2C C 编程无济于事