Python 熊猫相当于';如果'';其他';将计算列添加到df的条件

Python 熊猫相当于';如果'';其他';将计算列添加到df的条件,python,pandas,Python,Pandas,下表统计文本中的唯一单词(本例中为《哈姆雷特》的德语文本) 使用Pandas,我想添加一个列['frequency'],打印三个答案中的一个 如果“计数”列中的值为10,则频率为 “频繁” 如果“计数”列中的值为1则频率为“唯一” 我是熊猫队的新手,所以我最初认为我必须使用“for”循环和“if”“else”。当然,这对我不起作用,在阅读了这篇文章之后,我发现你可以用.loc[]来代替。它干净多了 我会把答案放在下面,以防其他人真的需要这个设置 After-请忽略第一行,它只给出文本中唯一单

下表统计文本中的唯一单词(本例中为《哈姆雷特》的德语文本)

使用Pandas,我想添加一个列['frequency'],打印三个答案中的一个

  • 如果“计数”列中的值为10,则频率为 “频繁”

  • 如果“计数”列中的值为1则频率为“唯一”

我是熊猫队的新手,所以我最初认为我必须使用“for”循环和“if”“else”。当然,这对我不起作用,在阅读了这篇文章之后,我发现你可以用.loc[]来代替。它干净多了


我会把答案放在下面,以防其他人真的需要这个设置 After-请忽略第一行,它只给出文本中唯一单词的总数

data.loc[data["count"] > 10,  "frequency"] = "frequent"
data.loc[data["count"] <= 10, "frequency"] = "infrequent"
data.loc[data["count"] == 1,  "frequency"] = "unique"

对于多个条件,考虑使用:


conditions=[data['count']==1,data['count']>10,data['count']这是
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]
pd.cut(df['count'],
bin=[-np.inf,1,10,np.inf],
标签=[‘唯一’、‘不频繁’、‘频繁’])
0频繁
1不经常
2独特的
3罕见
4不经常
5独特的
6独特
7不经常
8独特的
9独特
10独特
11独特的
12独特
13频繁
14独特的
15独特
16独特
17独特的
18独特
名称:计数,数据类型:类别
类别(3,对象):[独特<罕见<频繁]

np的缺点。在另一个答案中选择
,您需要在选择之前评估所有条件,并且不能在更多条件下进行缩放。

使用DataFrame的另一种替代方法。应用:

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)
输出:


一如既往的优秀,你能给我介绍一个适合numpy的好链接吗?那里不太好。谢谢
数据['count']==1
应该在
数据['count']之前我不担心这一点,因为我不是OP:)我一直是你们两个的忠实追随者@coldspeed如果你和jpp能分享一些好的numpy链接,那将非常有帮助。@anky_91:)至于我是如何/为什么学会的,这主要是出于加速现有pandas代码的要求(用numpy做同样的事情通常比熊猫更快,因为开销更小).Docs和其他较旧的答案。@coldspeed,很好,谢谢。我们可以更改条件的顺序。如果您的问题得到了回答,请向上投票/接受最有帮助的问题。您可以通过单击答案左侧的灰色复选框将其切换为绿色来执行此操作。谢谢。所有这些答案都很好!我给出了我使用的解决方案当我发布问题时。但是我的方法非常基本,所有其他方法都非常有用。在这种情况下,如果你喜欢自己的答案,那么你可以接受自己的答案。谢谢你的提示;我不喜欢它,但也可以
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]
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)