pandas 如何根据同一 Dataframe 中两列的范围向 Dataframe 添加新行?

hmae6n7t  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(157)

我有一个dataframe,它总结了一个更大的网络中的轨道段。这些段有特定的segement_id,它看起来像这样:
第一个
从图形上看,我希望执行以下操作:

实际上,我需要找到两对列(['km_start','km_end']['min_km_start','max_km_end'])之间的间隙,并从-1开始按降序填充segement_id
以下是所需的输出:

segment_id  km_start  km_end  min_km_start  max_km_end
    0         -1         0       2             0          25
    1          a         2       3             0          25
    2         -2         3       4             0          25
    3          b         4       7             0          25
    4         -3         7       9             0          25
    5          c         9      11             0          25
    6         -4        11      15             0          25
    7          d        15      16             0          25
    8         -5        16      20             0          25
    9          e        20      22             0          25
   10         -6        22      25             0          25
jdzmm42g

jdzmm42g1#

试试这个

starts = pd.concat([pd.Series(df['min_km_start'].iloc[0]), df['km_end']]).reset_index(drop=True)
ends = pd.concat([df['km_start'], pd.Series(df['max_km_end'].iloc[0])]).reset_index(drop=True)
mask = ~starts.isin(df['km_start'])
pd.concat([df, pd.DataFrame({'km_start': starts[mask], 'km_end': ends[mask], 'segment_id': np.arange(-1,-mask.sum()-1,-1)})]).fillna(method='ffill').sort_values(by='km_start').reset_index(drop=True)

输出量

segment_id  km_start    km_end  min_km_start    max_km_end
0   -1          0           2       0.0             25.0
1   a           2           3       0.0             25.0
2   -2          3           4       0.0             25.0
3   b           4           7       0.0             25.0
4   -3          7           9       0.0             25.0
5   c           9           11      0.0             25.0
6   -4          11          15      0.0             25.0
7   d           15          16      0.0             25.0
8   -5          16          20      0.0             25.0
9   e           20          22      0.0             25.0
10  -6          22          25      0.0             25.0

相关问题