Python 如何将数据帧的不同分类数据汇总到不同的列中

Python 如何将数据帧的不同分类数据汇总到不同的列中,python,pandas,Python,Pandas,我想把“R”、“F”和“M”添加到一列中。假设任何记录都有R=1、F=1和M=1,那么我想要3。但是当我做的时候 rfm['RFM_Score'] = rfm[['R','F','M']].sum(axis = 1) print(rfm['RFM_Score'].head()) 我得到的是111.0而不是3这个怎么样: rfm['RFM_Score'] = rfm[['R']].astype(int)+rfm[['F']].astype(int)+rfm[['M']].astype(int)

我想把“R”、“F”和“M”添加到一列中。假设任何记录都有R=1、F=1和M=1,那么我想要3。但是当我做的时候

rfm['RFM_Score'] = rfm[['R','F','M']].sum(axis = 1)
print(rfm['RFM_Score'].head())
我得到的是111.0而不是3

这个怎么样:

rfm['RFM_Score'] = rfm[['R']].astype(int)+rfm[['F']].astype(int)+rfm[['M']].astype(int)
或者您甚至可以使用:

rfm[['R', 'F', 'M']].appy(pd.to_numeric, errors='coerce').sum(axis=1)

看起来这些是字符串而不是数字,请尝试:


rfm['rfm_Score']=rfm['R','F','M']].astype(float,errors='ignore').sum(axis=1)
这可能不是最优雅的解决方案,但是我用一些测试数据验证了这一点,应该可以:

rfm['RFM_Score'] = rfm['R'] + rfm['F'] + rfm['M']
恐怕我不太清楚为什么要把你的值连在一起,而不是求和。我仍在学习自己,我发现有时这些函数中最直观的方式并不能给出直观预期的结果。希望这对tho有帮助!祝你好运


编辑:我看到有人指出,这些数值很可能是字符串而不是int,这肯定可以解释连接。

欢迎使用StackOverflow。列
R
F
M
的数据类型是什么?我猜它们是字符串。请尝试
rfm[['R','F','M']].appy(pd.to_numeric,errors='concurve').sum(axis=1)
您知道熊猫为什么会以这种方式进行“字符串求和”吗?这些列的某些行中可能有非数值。如果使用read_csv加载此数据,则可以指定每列具有显式类型的dtype参数。我想问的是,您是否知道为什么熊猫会先将
“1”、“2”、“8”
作为字符串合并,然后将结果强制转换为
float
(如果可以的话)。啊,好的。因此,我的理解是,这是一种运算符重载的情况:对于Python中的字符串,加号运算符意味着连接。
pd.to_numeric
首选。有太多的机会在
astype(int)
astype(float)
中遇到错误,
pd.to\u numeric
为您处理。Ya,当给定列rfm[['R','F','M']]的某些索引处有非数字字符时,to\u numeric可以方便地使用。appy(pd.to\u numeric,errors='concurve')。sum(axis=1)这很有效,谢谢