我有一个熊猫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

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


现在生成的数据框为:

      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,类别为cat1cat2。如何使用pandas.cut()根据second_column中的“类”对这些值进行重新分类?

更重要的是,假设我想要更复杂的间隔,例如小于或等于500 le(500)且大于或等于20 ge(20)?怎么做?在这种情况下,应将1标记为分组:

      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             1
6        item7          cat2             9             1

最佳答案

在这种情况下,我不会使用pd.cut

df['less_than_ten'] = df.third_column.le(10).astype(np.uint8)
df.loc[df.second_column=='cat2','less_than_ten'] = \
    df.loc[df.second_column=='cat2','third_column'].le(10).astype(np.uint8) + 2


结果:

In [99]: df
Out[99]:
  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

关于python - 如何使用Pandas DataFrame进行大于/小于合并?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43301247/

10-10 18:00