我得到了一个df,其中的't'列表示时间,'first'和'second'列(这里,为了简单起见,我在t列中使用了数字,但它们将是datetime对象或日期字符串)
t first second
1 grey red
2 green red
3 red red
4 grey green
5 green red
6 grey green
7 green red
8 red red
它可以像这样创建:
import pandas as pd
dfx = pd.DataFrame(
{
'time': [1,2,3,4,5,6,7,8],
'first': ['grey', 'green', 'red', 'grey', 'green', 'grey', 'green', 'red'],
'second': ['red', 'red', 'red', 'green', 'red', 'green', 'red', 'red']
}
)
我需要选择第一个等于绿色的行,然后添加第二个也等于绿色的行,得到的df如下所示:
t first t_second
2 green 4
5 green 6
7 green NaN
我怎样才能做到这一点?
我发现了一个类似的问题here,但它处理布尔值。我不完全理解答案,但据我所知,它不工作在一个类似的方式与多个类别值。我也不能转换为布尔,因为我将有多个选项的颜色类别。
2条答案
按热度按时间p5cysglq1#
让我们先对
second
列进行one-hot编码:然后将
green
和red
乘以t
,这样我们就可以将t
分解为green
和red
:现在,如果我们用 * 下一个非零 * 值填充零,我们将得到所需的结果。
这意味着从
t = 1
开始,green
的下一次出现是在t = 4
,我们现在只需要将其加入到原始 Dataframe 中就可以得到我们想要的结果。代码:
这里假设
t != 0
,实际数据很可能就是这种情况。ny6fqffe2#
这是列的反向填充吗?
查找条件为真的值:
反向填充:
一个二个一个一个
选择
first
绿色行: