Python 多标签计数器的列表理解

Python 多标签计数器的列表理解,python,pandas,numpy,Python,Pandas,Numpy,我已经编写了下面的代码,它工作得很好,但是我正在尝试编写更具可读性和优化的代码。为此,我将替换我的代码,以列出理解,替换查找情感类的所有“如果条件”(双**) 试图将**代码优化为列表理解: emotion_classes = ["Joy", "Fear", "Anger", "Surprise","Sadness", "Trust","Anticipation"] [increaseCounterofJoy,increaseCounterofFear, for emotion in emot

我已经编写了下面的代码,它工作得很好,但是我正在尝试编写更具可读性和优化的代码。为此,我将替换我的代码,以列出理解,替换查找情感类的所有“如果条件”(双**)

试图将**代码优化为列表理解:

emotion_classes = ["Joy", "Fear", "Anger", "Surprise","Sadness", "Trust","Anticipation"]

[increaseCounterofJoy,increaseCounterofFear, for emotion in emotion_classes]
代码


这不是一个列表理解有用的任务。只需对循环使用传统的

emotion_classes = [
    "Joy", "Fear", "Anger", "Surprise",
    "Sadness", "Trust","Anticipation",
]

for index, row in iter_df.iterrows():
    for emotion in emotion_classes:
        if iter_df["Emotion Class"] == emotion:
            row[emotion] += 1
您的代码中有几个输入错误。您在测试中使用了
=
而不是
=
。我假设您想增加
行中的相应字段,而不是仅仅将它们设置为
+1

可能是透视表

In [1]: iter_df
Out[1]:
   Date Emotion Class
0     1           Joy
1     1         Peace
2     2           Joy
3     3         Peace
4     3         Peace

In [2]: iter_df['ones'] = 1

In [3]: pd.pivot_table(iter_df, index='Date', columns='Emotion Class', values='ones', margins=False, aggfunc='sum')
    ...:
Out[3]:
Emotion Class  Joy  Peace
Date
1              1.0    1.0
2              1.0    NaN
3              NaN    2.0

PM 2Ring的答案是可行的,但我想知道您是否可以将其简化为:

for index, row in iter_df.iterrows():    
    row[iter_df["Emotion Class"]] += 1

我从未见过像这样使用
**
操作符…等等,这只是突出显示我们应该查看的位置吗?他只是用它来标记一个区域,请参阅if chainSample
df
的最后一行,请访问codereview.stackexchange.com上有关代码的问题。我投票结束这个问题,因为它脱离了主题。此外,它修复了2个严重的打字错误。当agg未指定时,pivot_表将给出平均值。我认为OP不需要数据透视表。谢谢最后的数据:所有情绪类的数量为+1的情绪类都是计数器,例如喜悦:10,愤怒:15,悲伤:25。。。像这样我不明白有什么不同。。。你是说你想处理每次约会的重复情绪吗?代码处理了这一点,我更新了答案中的数据来演示这一点。如果您不想将日期作为数据帧索引,只需使用
.reset_index()
,它将被转换回一列,与您问题中的代码输出完全一样感谢scnerd,这正是我想做的,我也阅读了pd.pivot_表格,它适合我的要求,谢谢您的来电。我想那会有用的。我不熟悉pandas,但我认为它可以处理丢失的键,例如,如果当前的
iter_df[“情感类”]
键在
行中还不存在。
for index, row in iter_df.iterrows():    
    row[iter_df["Emotion Class"]] += 1