说我有一个数据框
id category
1 A
2 A
3 B
4 C
5 A
我想在其中category == 'A'
处创建一个具有增量值的新列。所以应该是这样。
id category value
1 A 1
2 A 2
3 B NaN
4 C NaN
5 A 3
目前,我能够做到
df['value'] = pd.nan
df.loc[df.category == "A", ['value']] = range(1, len(df[df.category == "A"]) + 1)
是否有更好的/ python方式(例如,我不必用nan初始化value列?),当前,此方法为我分配了一个浮点类型,而不是我想要的整数。
答案 0 :(得分:0)
如果默认值为value
,则不必NaN
列进行初始化;如果创建时没有[]
,则也使用sum
来表示掩码的计数值:
m = df.category == "A"
df.loc[m, 'value'] = range(1, m.sum() + 1)
df['value'] = df['value'].astype('Int64')
print (df)
0 1 A 1
1 2 A 2
2 3 B <NA>
3 4 C <NA>
4 5 A 3
如果还需要设置为可为空的整数:
m = df.category == "A"
df['value'] = m.cumsum().where(m).astype('Int64')
print (df)
id category value
0 1 A 1
1 2 A 2
2 3 B <NA>
3 4 C <NA>
4 5 A 3
答案 1 :(得分:0)
另一种方式可能是
df['value'] = df['category'].eq('A').cumsum()
df['value'][df['category']!='A'] = pd.NA