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 中的一列数据进行装仓.
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