[英]Pandas - Create new column and assign values based on filter
假设我有一个 dataframe
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)
有没有更好的/pythonic 方法来执行此操作(即我不必使用 nan 初始化值列?目前,此方法为我分配了一个 float 类型,而不是我想要的 integer。
如果默认值为NaN
,则列value
不需要初始化,如果创建时不使用[]
,则掩码的计数值也使用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
另一种方式可能是
df['value'] = df['category'].eq('A').cumsum()
df['value'][df['category']!='A'] = pd.NA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.