下表计算了文本中的唯一单词(在这种情况下为“哈姆雷特”的德语文本)。
使用熊猫,我想添加一列['frequency'],该列显示三个答案之一。
如果“计数”列中的值为<= 10 ,则频率为 “不常”
如果“计数”列中的值> 10 ,则频率为 “频繁”
如果“计数”列中的值为1 ,则频率为“唯一”
我对熊猫是陌生的,所以我最初认为我必须使用'for'循环和'if''else'。当然,这对我不起作用,阅读完此内容后,我看到您可以改用.loc []。干净得多。
如果其他人确实需要此设置,我将在下面给出答案。这是我之前使用的桌子-
count word length
0 67223 0
1 7 deinen 6
2 1 überwachsen 11
3 3 them 4
4 2 fortunens 9
5 1 flammen 7
6 1 ersäuentsezlichen 17
7 2 alleino 7
8 1 empfehle 8
9 1 beschulöffentlicher 19
10 1 unterthänige 12
11 1 pr 2
12 1 zurükzutreiben 14
13 38 wo 2
14 1 schadhaften 11
15 1 ddiese 6
16 1 zurükhaltend 12
17 1 laim 4
18 1 agents 6
答案 0 :(得分:7)
这是pd.cut
的绝佳用例:
pd.cut(df['count'],
bins=[-np.inf, 1, 10, np.inf],
labels=['unique', 'infrequent', 'frequent'])
0 frequent
1 infrequent
2 unique
3 infrequent
4 infrequent
5 unique
6 unique
7 infrequent
8 unique
9 unique
10 unique
11 unique
12 unique
13 frequent
14 unique
15 unique
16 unique
17 unique
18 unique
Name: count, dtype: category
Categories (3, object): [unique < infrequent < frequent]
在另一个答案中,np.select
的缺点是您需要在选择之前评估所有条件,并且在更多条件下无法很好地扩展。
答案 1 :(得分:3)
对于多种情况,请考虑使用np.select
:
conditions = [data['count'] == 1, data['count'] > 10, data['count'] <= 10]
choices = ['unique', 'frequent', 'infrequent']
data['frequency'] = np.select(conditions, choices)
conditions
的顺序很重要,因为您不希望data['count'] <= 10
包含计数1
。
您可能还希望考虑使用pd.cut
或np.digitize
,另请参阅How to map numeric data into categories / bins in Pandas dataframe。
答案 2 :(得分:1)
使用DataFrame.apply的另一种替代方法:
def frequer(wordcnt):
if wordcnt == 1: return 'unique'
elif wordcnt >10: return 'frequent'
else: return 'infrequent'
df['freq'] = df.apply(lambda x: frequer(x['count']),axis=1)
输出:
答案 3 :(得分:0)
之后-不过请忽略第一行,它仅给出文本中唯一单词的总数。
data.loc[data["count"] > 10, "frequency"] = "frequent"
data.loc[data["count"] <= 10, "frequency"] = "infrequent"
data.loc[data["count"] == 1, "frequency"] = "unique"
结果:
count word length frequency
0 67223 0 frequent
1 7 deinen 6 infrequent
2 1 überwachsen 11 unique
3 3 them 4 infrequent
4 2 fortunens 9 infrequent
5 1 flammen 7 unique
6 1 ersäuentsezlichen 17 unique
7 2 alleino 7 infrequent
8 1 empfehle 8 unique
9 1 beschulöffentlicher 19 unique
10 1 unterthänige 12 unique
11 1 pr 2 unique
12 1 zurükzutreiben 14 unique
13 38 wo 2 frequent