[英]Pandas Dataframe: assign to different columns based on positive/negative values
[英]How to categorize text in a pandas dataframe based on the number of positive and negative keywords
我有一个看起来像这样的熊猫数据框:
Tweets negative_keywords positive_keywords
0 Şanlıurfa'da DAEŞ ile [] []
1 Hacettepe Üni. Araştırması [] []
2 Kadına şiddetin suç olduğu [suç] []
3 Suriyeli'lerin fal bakabilme [] []
4 Hastaneye git Suriyeli. PTT ye [] [kardeşi]
我想添加一个名为 neutral_keywords 的新列。 如果negative_keywords和positive_keywords同时为[],neutral_keywords应该取[neutral]的值。 否则,它应该取 [] 的值。 然后,我应该根据正面、负面和中性的值添加一个新列。 所以,我的新 pandas 数据框应该是这样的:
Tweets negative_keywords positive_keywords keyword_category keyword_category
0 Şanlıurfa'da DAEŞ ile [] [] [neutral] neutral
1 Hacettepe Üni. Araştırması [] [] [neutral] neutral
2 Kadına şiddetin suç olduğu [suç] [] [] negative
3 Suriyeli'lerin fal bakabilme [] [] [neutral] neutral
4 Hastaneye git Suriyeli. PTT ye [] [kardeşi] [] positive
我怎样才能做到这一点?
假设df
中的数据是字符串列表,我会这样做。
n_negative = df['negative_keywords'].apply(len)
n_positive = df['positive_keywords'].apply(len)
df['keyword_category'] = 'neutral'
df.loc[n_negative > 0, 'keyword_category'] = 'negative'
df.loc[n_positive > 0, 'keyword_category'] = 'positive' # May over-write negatives
输出:
>>> df
Tweets negative_keywords positive_keywords keyword_category
0 Şanlıurfa'da DAEŞ ile [] [] neutral
1 Hacettepe Üni. Araştırması [] [] neutral
2 Kadına şiddetin suç olduğu [suç] [] negative
3 Suriyeli'lerin fal bakabilme [] [] neutral
4 Hastaneye git Suriyeli. PTT ye [] [kardeşi] positive
您可能要考虑的一种替代方法是:
n_negative = df['negative_keywords'].apply(len)
n_positive = df['positive_keywords'].apply(len)
df['keyword_category'] = 'neutral'
df.loc[n_negative > n_positive, 'keyword_category'] = 'negative'
df.loc[n_positive > n_negative, 'keyword_category'] = 'positive'
# define a function which returns True if all are empty lists all_empty = lambda x: all(not lst for lst in x) # apply function to the two columns to create a mask mask = df[['negative_keywords', 'positive_keywords']].apply(all_empty, axis=1) # initialize the neutral_keywords column df['neutral_keywords'] = [[]] * len(mask) # update the neutral_keywords column where the mask is True df.loc[mask, 'neutral_keywords'] = [['neutral']] * mask.sum() df
这可以是替代解决方案。
df["keyword_category"] = ['negative' if n else 'positive' if p else 'neutral'
for n, p in zip(df['negative_keywords'], df['positive_keywords'])]
结果:
Tweets negative_keywords positive_keywords keyword_category
0 Şanlıurfada DAEŞ ile [] [] neutral
1 Hacettepe Üni. Araştırması [] [] neutral
2 Kadına şiddetin suç olduğu [suç] [] negative
3 Suriyelilerin fal bakabilme [] [] neutral
4 Hastaneye git Suriyeli. PTT ye [] [kardeşi] positive
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.