[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中的新列所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)