将dataframe列中的某些多个值重命名为另一个单个值

2024-04-25 17:03:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个1GB大小的数据帧,下面是一个虚拟帧

df <- data.frame(group=rep(c("A", "B", "C","D","E","F","G","H"), each=4),height=sample(100:150, 16))
df
   group height
1      A    105
2      A    119
3      B    108
4      B    114
5      C    109
6      C    111
7      D    148
8      D    121
9      E    133
10     E    101
11     F    143
12     F    135
13     G    147
14     G    141
15     H    150
16     H    145

我的目标是改变列组的名称,比如说所有的B、H和G都改为NC,A全部改为PC,其他的改为NON 所以我试了下面的一句话。在

^{pr2}$

但它抛出了以下错误

Error in `[<-.factor`(`*tmp*`, df$group %in% de, , value = "nc") : 
  incorrect number of subscripts on matrix
In addition: Warning message:
In `[<-.factor`(`*tmp*`, df$group %in% de, , value = "nc") :
  invalid factor level, NA generated

最后,数据帧df应该是这样的

df
   group height
1      PC    105
2      PC    119
3      NC    108
4      NC   114
5      NON    109
6      NON    111
7      NON    148
8      NON    121
9      NON    133
10     NON    101
11     NON    143
12     NON   135
13     NC    147
14     NC    141
15     NC    150
16     NC    145

任何关于R或熊猫的建议都会很棒。 谢谢你


Tags: 数据indfdatavaluegroupdeframe
3条回答

带有^{}和布尔掩码的Pandas/Numpy解决方案:

print (df['group'] =='B')
1     False
2     False
3     False
4     False
5      True
6      True
7      True
8      True
9     False
10    False
11    False
12    False
Name: group, dtype: bool

df['group'] = np.where(df['group'] == 'B','NC','PC')
print (df)

   group  height
1     PC     113
2     PC     118
3     PC     128
4     PC     143
5     NC     109
6     NC     141
7     NC     142
8     NC     129
9     PC     127
10    PC     102
11    PC     108
12    PC     107

np.where的解决方案:

^{pr2}$

您也可以替换组名称,如下所示

    df$group=as.character(df$group)
    df$group[c(3:4,13:16)]='NC'
    df$group[c(1:2)]='PC'
    df$group[c(5:12)]='NON'

在R中,您可以尝试:

先转换为字符,然后直接替换值。

df$group <- as.character(df$group); 
df$group[df$group %in% c("B")] <- "NC"

编辑:

更新问题时,可以尝试ifelse。当然,您也可以通过这种方法覆盖group列。

^{pr2}$

相关问题 更多 >

    热门问题