python-如何使用“ pandas.cut()”根据除要合并的列以外的其他列对数据进行合并?

这个问题已经在这里有了答案:            >            How to use .le() and .ge() when filtering pandas data frame columns?                                    3个
我有一个 pandas DataFrame如下:

import pandas as pd
import numpy as np

data = {"first_column": ["item1", "item2", "item3", "item4", "item5", "item6", "item7"],
        "second_column": ["cat1", "cat1", "cat1", "cat2", "cat2", "cat2", "cat2"],
        "third_column": [5, 1, 8, 3, 731, 189, 9]}

df = pd.DataFrame(data)

df
     first_column second_column  third_column
0        item1          cat1             5
1        item2          cat1             1
2        item3          cat1             8
3        item4          cat2             3
4        item5          cat2           731
5        item6          cat2           189
6        item7          cat2             9

现在,假设我想使用pandas.cut()创建第四列,显示第三列的分类.在此,我为每行标记third_column中的元素是否小于或等于10,<= 10.

df["less_than_ten"]= pd.cut(df.third_column, [-np.inf, 10, np.inf], labels=(1,0))

现在生成的 dataframe 为:

      first_column second_column  third_column less_than_ten
0        item1          cat1             5             1
1        item2          cat1             1             1
2        item3          cat1             8             1
3        item4          cat2             3             1
4        item5          cat2           731             0
5        item6          cat2           189             0
6        item7          cat2             9             1

问题:请注意第二列second_column,类别为cat1和cat2.我将如何使用pandas.cut()根据second_column中的“类”对这些值进行重新分类?

对于cat1,我们可以将third_column中的值≤10标记为0或1.对于cat2,我们可以将third_column中的值标记为< = 10(2否,3是). 此DataFrame如下所示:

      first_column second_column  third_column less_than_ten
0        item1          cat1             5             1
1        item2          cat1             1             1
2        item3          cat1             8             1
3        item4          cat2             3             3
4        item5          cat2           731             2
5        item6          cat2           189             2
6        item7          cat2             9             3

如何做到这一点?我正在根据另一列的分类值对 pandas dataframe 中的一列数据进行装仓.

最佳答案

>您不需要pd.cut.您可以只使用< = 10并使用它或将其转换为整数. le(10)等于< = 10
>在这种情况下,您可以创建一个字典进行映射.使用它可以将类别转换为整数,然后可以将其添加到le(10)的结果中
>分配新列.您也可以使用df [‘less_than_ten’] =完成此操作,但是我喜欢分配
m = dict(cat1=0, cat2=2)
df.assign(less_than_ten=df.second_column.map(m) + df.third_column.le(10))

  first_column second_column  third_column  less_than_ten
0        item1          cat1             5              1
1        item2          cat1             1              1
2        item3          cat1             8              1
3        item4          cat2             3              3
4        item5          cat2           731              2
5        item6          cat2           189              2
6        item7          cat2             9              3