数据如下所示:
Ctgr
A
B
B
C
D
E
F
我正在寻找的结果是:
Ctgr|subctgr
A | A
B | A
B | A
C | A
D | D
E | D
F | D
也就是说subctgr是由每个“组”第一行的值决定的。
但是,我不知道如何区分 python 中的每个“组”,尽管它们由 NaN 值分隔。
最佳答案
拳头测试缺失行 Series.isna
,然后通过与 Series.shift
比较来获取 groups
的第一个值编辑掩码值并通过 ffill
创建由以前的值填充的新列。最后设置新列 numpy.where
:
#for test missing values
m = df['Ctgr'].isna()
#for test emtsy strings
#m = df['Ctgr'].eq('')
df['subctgr'] = np.where(m,np.nan,df['Ctgr'].where(m.ne(m.shift())).ffill())
print (df)
Ctgr subctgr
0 A A
1 B A
2 B A
3 C A
4 NaN NaN
5 D D
6 E D
7 F D
详细信息:
print (df.assign(m = df['Ctgr'].isna(),
mask = m.ne(m.shift()),
first = df['Ctgr'].where(m.ne(m.shift())),
ffill = df['Ctgr'].where(m.ne(m.shift())).ffill(),
subctgr = np.where(m,np.nan,df['Ctgr'].where(m.ne(m.shift())).ffill())))
Ctgr m mask first ffill subctgr
0 A False True A A A
1 B False False NaN A A
2 B False False NaN A A
3 C False False NaN A A
4 NaN True True NaN A NaN
5 D False True D D D
6 E False False NaN D D
7 F False False NaN D D
关于python - 如何根据 DataFrame 中前一行的值标记特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597325/