首页 > 解决方案 > 熊猫如何创建一个带有开始和结束的新数据框,即使在不同的行上

问题描述

我有一个带有 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 

标签: pythonpandas

解决方案


加入自身,以创建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

推荐阅读