python – 将系列分类到pandas中的新列
发布时间:2020-12-16 23:02:38 所属栏目:Python 来源:网络整理
导读:我希望能够获取当前的数据集,其中包含整数,并根据特定条件对其进行分类.该表看起来像这样: [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 我想在一个单独的列中按字符串对这些进行
我希望能够获取当前的数据集,其中包含整数,并根据特定条件对其进行分类.该表看起来像这样:
[in]> df = pd.DataFrame({'A':[0,2,3,0],'B': [1,'C': [0,1,0]}) [out]> A B C 0 0 1 0 1 2 0 0 2 3 2 1 3 2 0 0 4 0 0 1 5 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 D 0 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 D 0 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 第二个是使用高级索引: >>> 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 D 0 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 哪个更清楚取决于具体情况.通常逻辑越复杂,我就越有可能将它包装在一个函数中,然后我可以记录和测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |