python - 将系列分类到 Pandas 的新列

标签 python pandas

我希望能够获取我当前的数据集,其中填充了整数,并根据特定标准对它们进行分类。该表看起来像这样:

[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  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,它们都导致类型错误(在 ints 和 series 之间)。我的印象是这是一个相当简单的问题。尽管以下是完全错误的,但这是尝试 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"

如果有人能帮我解决这个问题,我将不胜感激。

最佳答案

我可以想到两种方法。首先是编写一个分类器函数,然后按行.apply它:

>>> import pandas as pd
>>> df = pd.DataFrame({'A':[0,2,3,2,0,0],'B': [1,0,2,0,0,0],'C': [0,0,1,0,1,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,2,3,2,0,0],'B': [1,0,2,0,0,0],'C': [0,0,1,0,1,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

哪个更清楚,要视情况而定。通常逻辑越复杂,我就越有可能将其包装在一个函数中,然后我可以记录和测试。

关于python - 将系列分类到 Pandas 的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15281320/

相关文章:

python - 使用 Numpy 进行线性回归

Python SQL 到 pandas DataFrame 2

Python Pandas sizeof 倍

python - Python2.6 中 ElementTree 的 iter() 等价物

python - pandas.set_option 提供数据帧的详细信息而不是返回帧

python - 在 Python 3 中使用 GooglePlaces 获取地点详细信息(特别是评论)

python - 确定 pandas HDF 文件中 DataFrame 的格式

python - 结合 iloc 和 loc

python - 成对测试 Pandas 数据框的统计显着性

python - 两个进程能否访问内存中(:memory:) sqlite database concurrently?