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 chainSampledf
的最后一行,请访问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