Python 3.x 使用pandas组合包含NaN和int值的所有连续行中的行值

Python 3.x 使用pandas组合包含NaN和int值的所有连续行中的行值,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我需要你的帮助: 我想像这样合并连续行: 输入: Time ColA ColB Time_for_test[sec] 2020-01-19 08:51:56.461 NaN B NaN 2020-01-19 08:52:15.405 NaN NaN 18.95 2020-01-19 08:52:40.923 A NaN NaN 2020-01-19 08:52:59.589 NaN

我需要你的帮助: 我想像这样合并连续行:

输入:

Time                      ColA   ColB   Time_for_test[sec]

2020-01-19 08:51:56.461   NaN    B      NaN
2020-01-19 08:52:15.405   NaN    NaN    18.95
2020-01-19 08:52:40.923   A      NaN    NaN
2020-01-19 08:52:59.589   NaN    NaN    18.67
2020-01-19 08:54:07.687   NaN    B      NaN
Time                      ColA   ColB   Time_for_test[sec]

2020-01-19 08:51:56.461   NaN    B      NaN
2020-01-19 08:52:15.405   NaN    B      18.95
2020-01-19 08:52:40.923   A      NaN    NaN
2020-01-19 08:52:59.589   A      NaN    18.67
2020-01-19 08:54:07.687   NaN    B      NaN
输出:

Time                      ColA   ColB   Time_for_test[sec]

2020-01-19 08:51:56.461   NaN    B      NaN
2020-01-19 08:52:15.405   NaN    NaN    18.95
2020-01-19 08:52:40.923   A      NaN    NaN
2020-01-19 08:52:59.589   NaN    NaN    18.67
2020-01-19 08:54:07.687   NaN    B      NaN
Time                      ColA   ColB   Time_for_test[sec]

2020-01-19 08:51:56.461   NaN    B      NaN
2020-01-19 08:52:15.405   NaN    B      18.95
2020-01-19 08:52:40.923   A      NaN    NaN
2020-01-19 08:52:59.589   A      NaN    18.67
2020-01-19 08:54:07.687   NaN    B      NaN
当然,我检查了网站上是否存在类似的案例: 我尝试过添加一个新专栏,如下所示:

merge_df = merge_df.fillNa(0)
merge_df['sum'] = merge_df['TableA']+merge_df['Time_for_ST[sec]'].shift(-1)
它不起作用


感谢您的耐心

stack
unstack
是您的朋友。假设您的数据帧索引是唯一的:

df[['ColA', 'ColB']].stack() \
    .reset_index(level=1) \
    .reindex(df.index) \
    .ffill() \
    .set_index('level_1', append=True) \
    .unstack() \
    .droplevel(0, axis=1)

因为这是一条很长的操作链,所以只能运行第1行,然后是第1、2、1、2、3。。。。看看它是如何工作的。

stack
unstack
是你的朋友。假设您的数据帧索引是唯一的:

df[['ColA', 'ColB']].stack() \
    .reset_index(level=1) \
    .reindex(df.index) \
    .ffill() \
    .set_index('level_1', append=True) \
    .unstack() \
    .droplevel(0, axis=1)

因为这是一条很长的操作链,所以只能运行第1行,然后是第1、2、1、2、3。。。。看看它是如何工作的。

这里的逻辑是什么?是否希望
df[['ColA',ColB']]=df[['ColA',ColB']].ffill(limit=1)
?您的解决方案不会更改数据帧…这里的逻辑是什么?是否希望
df[['ColA',ColB']]=df[['ColA',ColB']].ffill(limit=1)
?您的解决方案不会更改数据帧…谢谢!你帮助我,我成功地创建了我想要的DF。谢谢!你帮助我,我成功地创建了我想要的DF。