pandas.DataFrame.loc , 在新列中标记数据
pandas.DataFrame.loc , Labeling data in new column
我有一个这样的 pandas 数据框:
ranking
1 4.33
2 1.34
3 3.76
..
我想创建这个:
ranking label
1 4.33 2
2 1.34 0
3 3.76 1
..
所以排名 < 3.5
导致标签 0
,3.5
和 4.25
之间的排名导致标签 1
,并且排名 > 4.25
导致标签 2
。
这是我到目前为止编写的代码:
df = pd.read_csv('./data/Step7_final.csv', index_col=False, encoding="ISO-8859-1")
df['label'] = df.ranking.where(df.ranking > 3.4999, 0)
df.loc[df.label > 3.4999 and < 4.2499, 'label'] = 1
df.loc[df.label > 4.2499, 'label'] = 2
我将标签 1 分配给 3.5 到 4.25 之间的排名值的第三行不起作用...我怎样才能让它起作用?
你需要:
df['label'] = df.ranking.where(df.ranking > 3.4999, 0)
df.ix[(df.label > 3.4999) & (df.label < 4.2499), 'label'] = 1
df.ix[df.label > 4.2499, 'label'] = 2
print (df)
ranking label
1 4.33 2.0
2 1.34 0.0
3 3.76 1.0
您需要使用按位 &
而不是 and
。条件必须按 parantheses.
分组
但是,更好的方法是使用 pd.cut:
pd.cut(df['ranking'], [-np.inf, 3.5, 4.25, np.inf], labels=[0, 1, 2])
Out[55]:
0 2
1 0
2 1
Name: ranking, dtype: category
Categories (3, int64): [0 < 1 < 2]
我有一个这样的 pandas 数据框:
ranking
1 4.33
2 1.34
3 3.76
..
我想创建这个:
ranking label
1 4.33 2
2 1.34 0
3 3.76 1
..
所以排名 < 3.5
导致标签 0
,3.5
和 4.25
之间的排名导致标签 1
,并且排名 > 4.25
导致标签 2
。
这是我到目前为止编写的代码:
df = pd.read_csv('./data/Step7_final.csv', index_col=False, encoding="ISO-8859-1")
df['label'] = df.ranking.where(df.ranking > 3.4999, 0)
df.loc[df.label > 3.4999 and < 4.2499, 'label'] = 1
df.loc[df.label > 4.2499, 'label'] = 2
我将标签 1 分配给 3.5 到 4.25 之间的排名值的第三行不起作用...我怎样才能让它起作用?
你需要:
df['label'] = df.ranking.where(df.ranking > 3.4999, 0)
df.ix[(df.label > 3.4999) & (df.label < 4.2499), 'label'] = 1
df.ix[df.label > 4.2499, 'label'] = 2
print (df)
ranking label
1 4.33 2.0
2 1.34 0.0
3 3.76 1.0
您需要使用按位 &
而不是 and
。条件必须按 parantheses.
但是,更好的方法是使用 pd.cut:
pd.cut(df['ranking'], [-np.inf, 3.5, 4.25, np.inf], labels=[0, 1, 2])
Out[55]:
0 2
1 0
2 1
Name: ranking, dtype: category
Categories (3, int64): [0 < 1 < 2]