同一列中的Pandas Ffill和Bfill - 条件

发布于 2025-02-09 17:36:57 字数 517 浏览 4 评论 0原文

我有一个带化学的专栏,在某个时候,我会改变它们。我想ffill直到“更改点”和bfill之后。

我有几个这样的更改点:

date0   NaN
date1   chem1
date2   NaN
date3   NaN
date4   change
date5   NaN
date6   chem2
date7   chem2
date8   NaN
date9   change
date10   NaN
date11   chem3
date12   NaN

我想拥有:

date0   chem1
date1   chem1
date2   chem1
date3   chem1
date4   change
date5   chem2
date6   chem2
date7   chem2
date8   chem2
date9   change
date10   chem3
date11   chem3
date12   chem3

关于最佳方法的任何建议吗?

I have a column with chemistries and at some point I have the change of them. I want to ffill until the "changepoint" and bfill after it.

I have several change points like this:

date0   NaN
date1   chem1
date2   NaN
date3   NaN
date4   change
date5   NaN
date6   chem2
date7   chem2
date8   NaN
date9   change
date10   NaN
date11   chem3
date12   NaN

I would like to have it:

date0   chem1
date1   chem1
date2   chem1
date3   chem1
date4   change
date5   chem2
date6   chem2
date7   chem2
date8   chem2
date9   change
date10   chem3
date11   chem3
date12   chem3

any suggestions on the best approach here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘虞初梦 2025-02-16 17:36:57

假设“ col”您的第二列,请使用自定义组:

df['col'] = df.groupby(df['col'].eq('change').cumsum())['col'].apply(lambda s:s.bfill().ffill())

输出;

      date     col
0    date0   chem1
1    date1   chem1
2    date2   chem1
3    date3   chem1
4    date4  change
5    date5   chem2
6    date6   chem2
7    date7   chem2
8    date8   chem2
9    date9  change
10  date10   chem3
11  date11   chem3
12  date12   chem3

Assuming 'col' your second column, use a custom group:

df['col'] = df.groupby(df['col'].eq('change').cumsum())['col'].apply(lambda s:s.bfill().ffill())

Output;

      date     col
0    date0   chem1
1    date1   chem1
2    date2   chem1
3    date3   chem1
4    date4  change
5    date5   chem2
6    date6   chem2
7    date7   chem2
8    date8   chem2
9    date9  change
10  date10   chem3
11  date11   chem3
12  date12   chem3
太阳男子 2025-02-16 17:36:57
df = pd.read_clipboard(header = None, names = ['a', 'b'])

在第二列上运行ffill

step1 = df.b.ffill()

step1 = step1.mask(step1.eq('change') & df.b.isna()).bfill()
df.assign(b = step1)

         a       b
0    date0   chem1
1    date1   chem1
2    date2   chem1
3    date3   chem1
4    date4  change
5    date5   chem2
6    date6   chem2
7    date7   chem2
8    date8   chem2
9    date9  change
10  date10   chem3
11  date11   chem3
12  date12   chem3
df = pd.read_clipboard(header = None, names = ['a', 'b'])

Run an ffill on the second column (I relabelled the columns as a and b):

step1 = df.b.ffill()

Run a condition on step1, and do a bfill after:

step1 = step1.mask(step1.eq('change') & df.b.isna()).bfill()
df.assign(b = step1)

         a       b
0    date0   chem1
1    date1   chem1
2    date2   chem1
3    date3   chem1
4    date4  change
5    date5   chem2
6    date6   chem2
7    date7   chem2
8    date8   chem2
9    date9  change
10  date10   chem3
11  date11   chem3
12  date12   chem3
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文