![](/img/trans.png)
[英]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.