重置索引并在pandas中应用新列名+重命名元素

时间:2018-03-27 13:47:18

标签: python pandas dataframe

我遇到的问题:reset_index()并在列中重命名字符串。

我有一个数据帧和python序列,如下所示

from collections import Counter
import pandas as pd

df = pd.DataFrame([['Directions to Starbucks', 1045],
                   ['Show me directions to Starbucks', 754],
                   ['Give me directions to Starbucks', 612],
                   ['Navigate me to Starbucks', 498],
                   ['Display navigation to Starbucks', 376],
                   ['Direct me to Starbucks', 201],
                   ['Navigate to Starbucks', 180]],
                  columns = ['Utterance', 'Frequency'])

c = Counter()

for row in df.itertuples():
    for i in row[1].split():
        c[i] += row[2]

res = pd.DataFrame.from_dict(c, orient='index')\
                  .rename(columns={0: 'Count'})\
                  .sort_values('Count', ascending=False)

def add_combinations(df, lst):
    for i in lst:
        words = '_'.join(i)
        df.loc[words] = df.loc[df.index.isin(i), 'Count'].sum()
    return df.sort_values('Count', ascending=False)

lst = [('Give', 'Show', 'Navigate', 'Direct')]

res = add_combinations(res, lst)

这给了我以下df

                           Count
to                          3666
Starbucks                   3666
Give_Show_Navigate_Direct   2245
me                          2065
directions                  1366
Directions                  1045
Show                         754
Navigate                     678
Give                         612
Display                      376
navigation                   376
Direct                       201

但是,当我尝试使用reset.index()重置索引时,列名变为" index",当我尝试重命名索引时,收到错误消息。

index                       Count
to                          3666
Starbucks                   3666
Give_Show_Navigate_Direct   2245
me                          2065
directions                  1366

此外,我尝试使用简单字典重命名Give_Show_Navigate_Direct,但看起来我无法解决索引/列名称问题。

df['index'].replace({'Give_Show_Navigate_Direct' : 'phrasal_verbs'})
KeyError: 'index'

1 个答案:

答案 0 :(得分:1)

您收到错误消息,因为您尝试更改的数据框不是df

您需要重置res的索引。然后它工作正常。

res.reset_index().replace({'Give_Show_Navigate_Direct' : 'phrasal_verbs'})