python – 将系列分类到pandas中的新列

python – 将系列分类到pandas中的新列,第1张

概述我希望能够获取当前的数据集,其中包含整数,并根据特定条件对其进行分类.该表看起来像这样: [in]> df = pd.DataFrame({'A':[0,2,3,2,0,0],'B': [1,0,2,0,0,0],'C': [0,0,1,0,1,0]})[out]> A B C0 0 1 01 2 0 02 3 2 13 2 0 04 0 0 1 我希望能够获取当前的数据集,其中包含整数,并根据特定条件对其进行分类.该表看起来像这样:
[in]> df = pd.DataFrame({'A':[0,2,3,0],'B': [1,'C': [0,1,0]})[out]>   A  B  C0  0  1  01  2  0  02  3  2  13  2  0  04  0  0  15  0  0  0

我想在一个单独的列中按字符串对这些进行分类.由于更熟悉R,我尝试使用该列定义中的规则创建一个新列.之后我尝试使用.ix和lambdas两者都导致类型错误(在整数和序列之间).我的印象是这是一个相当简单的问题.虽然以下是完全错误的,但这是来自尝试1的逻辑:

df['D']=(if ((df['A'] > 0) & (df['B'] == 0) & df['C']==0):     return "c1";elif ((df['A'] == 0) & ((df['B'] > 0) | df['C'] >0)):     return "c2";else:    return "c3";)

为了最终结果:

A  B  C     D0  0  1  0  "c2"1  2  0  0  "c1"2  3  2  1  "c3"3  2  0  0  "c1"4  0  0  1  "c2"5  0  0  0  "c3"

如果有人可以帮我解决这个问题,我将不胜感激.

解决方法 我可以想到两种方式.第一种是编写分类器函数,然后按行应用它:
>>> import pandas as pd>>> df = pd.DataFrame({'A':[0,0]})>>> >>> def classifIEr(row):...         if row["A"] > 0 and row["B"] == 0 and row["C"] == 0:...                 return "c1"...         elif row["A"] == 0 and (row["B"] > 0 or row["C"] > 0):...                 return "c2"...         else:...                 return "c3"...     >>> df["D"] = df.apply(classifIEr,axis=1)>>> df   A  B  C   D0  0  1  0  c21  2  0  0  c12  3  2  1  c33  2  0  0  c14  0  0  1  c25  0  0  0  c3

第二个是使用高级索引:

>>> df = pd.DataFrame({'A':[0,0]})>>> df["D"] = "c3">>> df["D"][(df["A"] > 0) & (df["B"] == 0) & (df["C"] == 0)] = "c1">>> df["D"][(df["A"] == 0) & ((df["B"] > 0) | (df["C"] > 0))] = "c2">>> df   A  B  C   D0  0  1  0  c21  2  0  0  c12  3  2  1  c33  2  0  0  c14  0  0  1  c25  0  0  0  c3

哪个更清楚取决于具体情况.通常逻辑越复杂,我就越有可能将它包装在一个函数中,然后我可以记录和测试.

总结

以上是内存溢出为你收集整理的python – 将系列分类到pandas中的新列全部内容,希望文章能够帮你解决python – 将系列分类到pandas中的新列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1206634.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存