Pythonic 条件聚合
pythonic conditional aggregation
我有一个包含 > 3000 个类别标签的大型 Dataframe。我想根据 groupby 计数有选择地重新编码标签。这就像 Excel 中的条件替换。例如:
ID Label
1 cat
2 dog
3 cat
4 cat
5 dog
6 bird
每个数量:
cat: 3
dog: 2
bird: 1
逻辑:如果计数 <= 2,则将标签更改为 'other'
ID Label
1 cat
2 other
3 cat
4 cat
5 other
6 other
每个数量:
cat: 3
other: 3
也许你们中的一些人知道一种更 pythonic 的方法来完成同样的事情。也许神秘的 lambda 函数可以提供帮助...
像往常一样,已经在这里阅读了一堆帖子。
我微不足道的 Python 代码如下所示:
df['Label'] = df.groupby('Label')['Label'].transform('count')
df['New_Label'] = np.where(df.label <= 2, 'other', df.label)
此代码使用 pd.DataFrame.where()
而不是 np.where()
并在一行中完成:
df.Label = df.Label.where(df.groupby('Label')['Label'].transform('count') > 2, 'other')
print(df)
Label
ID
1 cat
2 other
3 cat
4 cat
5 other
6 other
我有一个包含 > 3000 个类别标签的大型 Dataframe。我想根据 groupby 计数有选择地重新编码标签。这就像 Excel 中的条件替换。例如:
ID Label
1 cat
2 dog
3 cat
4 cat
5 dog
6 bird
每个数量:
cat: 3
dog: 2
bird: 1
逻辑:如果计数 <= 2,则将标签更改为 'other'
ID Label
1 cat
2 other
3 cat
4 cat
5 other
6 other
每个数量:
cat: 3
other: 3
也许你们中的一些人知道一种更 pythonic 的方法来完成同样的事情。也许神秘的 lambda 函数可以提供帮助...
像往常一样,已经在这里阅读了一堆帖子。
我微不足道的 Python 代码如下所示:
df['Label'] = df.groupby('Label')['Label'].transform('count')
df['New_Label'] = np.where(df.label <= 2, 'other', df.label)
此代码使用 pd.DataFrame.where()
而不是 np.where()
并在一行中完成:
df.Label = df.Label.where(df.groupby('Label')['Label'].transform('count') > 2, 'other')
print(df)
Label
ID
1 cat
2 other
3 cat
4 cat
5 other
6 other