我有一个示例DataFrame如下:
|track_id|跟踪日期|状态|status_info|
| - -----|- -----|- -----|- -----|
| track_1| 2021-01-01 2021- 01-01|核准的|无|
| Track_2| 2021-01-02 2021-01-02|无|认可的|
| Track_3| 2021-01-03 2021-01-03|核准的|认可的|
| Track_4| 2021-01-04 2021-01-04|核准的|核准的|
| 轨道_5| 2021-01-05 2021-01-05 2021-01-05|核定|数|已取消认可||
| track_6| 2021-01-06 2021-01-06|无|已取消认可||
我需要将status
和status_info
拆分成行,因此它会给出类似于下面的输出:
|track_id|跟踪日期|状态|status_info|
| - -----|- -----|- -----|- -----|
| track_1| 2021-01-01 2021- 01-01|核准的|无|
| Track_2| 2021-01-02 2021-01-02|无|认可的|
| Track_3| 2021-01-03 2021-01-03|核准的|认可的|
| Track_4| 2021-01-04 2021-01-04|核准的|核准的|
| 轨道_5| 2021-01-05 2021-01-05 2021-01-05|核准的|认可的|
| 轨道_5| 2021-01-05 2021-01-05 2021-01-05|核准的|取消|
| track_6| 2021-01-06 2021-01-06|无|认可的|
| track_6| 2021-01-06 2021-01-06|无|取消|
我已经尝试了下面的代码,使用this answer in another question作为参考:
# splitting string values into lists
new_status = df['status'].str.split('|', expand=True).stack().reset_index(level=1, drop=True)
new_status_info = df['status_info'].str.split('|', expand=True).stack().reset_index(level=1, drop=True)
# generating a temporary DataFrame to join later (error here)
df_split = pd.concat([new_status, new_status_info], axis=1, keys=['status', 'status_info'])
# then, we join both DataFrames
df.drop(columns=['status','status_info'], axis=1).join(df_split).reset_index(drop=True)
但它给了我一个ValueError:
ValueError: cannot reindex from a duplicate axis
当我在split步骤中将.reset_index(level=1, drop=True)
修改为.reset_index(drop=True)
时,join操作只给我带来了其中一个值,而不是预期的两个值:
|track_id|跟踪日期|状态|status_info|
| - -----|- -----|- -----|- -----|
| track_1| 2021-01-01 2021- 01-01|核准的|无|
| Track_2| 2021-01-02 2021-01-02|无|认可的|
| Track_3| 2021-01-03 2021-01-03|核准的|认可的|
| Track_4| 2021-01-04 2021-01-04|核准的|核准的|
| 轨道_5| 2021-01-05 2021-01-05 2021-01-05|核准的|取消|
| track_6| 2021-01-06 2021-01-06|无|认可的|
2条答案
按热度按时间brc7rcf01#
您可以
melt
、explode
、pivot
:输出:
kmbjn2e32#
您可以尝试使用
itertools.zip_longest
:图纸: