J'essaie de faire pivoter mon cadre de données afin de pouvoir créer une matrice de document, mais je rencontre des erreurs avec j'essaie de faire pivoter mon cadre de données. Voici ma trame de données d'origine avant d'essayer de jouer avec.

tidy_filter1 = pd.DataFrame(df_tweetText["text"].str.split(expand = True).stack().reset_index())
tidy_filter = pd.DataFrame(tidy_filter1,index = tidy_format1["id"])
tidy_filter = tidy_filter1.rename(index = tidy_filter["id"], columns = {"level_1": "num",0:"word"})
tidy_filter1["level_1"] = tidy_filter1.groupby("id").cumcount()
tidy_filter = tidy_filter.drop(columns = ["id"])
tidy_filter = tidy_filter.rename(index = tidy_format1["id"])

id                    num    word
1104159474368024599    0    repmiketurner
1104159474368024599    1    time
1104159474368024599    2    michael
1104159474368024599    3    cohen
1104159474368024599    4    told
1104159474368024599    5    truth
1104159474368024599    6    pled
1104159474368024599    7    guilty
1104159474368024599    8    also
1104159474368024599    9    said
1104159474368024599    10    collusion

Maintenant, lorsque j'essaie d'exécuter ce code ci-dessous, c'est là qu'il se casse.

df_freq = tidy_filter.pivot_table(values='word', index=tidy_filter.index, columns='word', aggfunc=pd.Series.count)

L'erreur me donne KeyError: 'word' que je ne comprends pas. J'ai essayé de remplacer les valeurs / colonnes par tidy_filter ['word] mais cela n'a pas fonctionné.

** Edit: je recherche cette sortie

id                   repmiketurner michael cohen told truth pled guilty also said collusion
1104159474368024599         1         1       1     1   1     1     1      1   1       1
1104155456019357703        0          0       0     1   1     0     0      1   0       0

** Edit2: donc quand je tape tidy_filter ['word'] ça me donne une KeyError différente: 'repmiketurner'

0
onbu 19 mars 2019 à 04:05

2 réponses

Meilleure réponse

Je pense que votre commande pivot_table a dû être modifiée - vous avez eu les arguments pour columns et values échangés. Vous aviez juste besoin d'utiliser columns='word' et values='num'.

C'est ce qui a fonctionné pour moi

df_freq = tidy_filter.pivot_table(columns='word',
                                    index=tidy_filter.index,
                                    values='num',
                                    aggfunc=pd.Series.count)

# Put pivot table columns in order of unique values of the 'word' column
word_unique = tidy_filter['word'].unique().tolist()
df_freq = df_freq[word_unique]

print(df_freq)
word                 repmiketurner  time  michael  cohen  told  truth  pled  guilty  also  said  collusion
id                                                                                                        
1104159474368024599              1     1        1      1     1      1     1       1     1     1          1
1
edesz 19 mars 2019 à 03:35

Je pense que vous recherchez pd.crosstab

pd.crosstab(df.id,df.word)
1
BENY 19 mars 2019 à 01:14