как изменить одно значение из Pandas DataFrame - PullRequest
0 голосов
/ 06 октября 2018

У меня есть два столбца в моем фрейме данных, один называется «Subreddits», в котором перечислены строковые значения, и один называется «Внешний вид», в котором указано, сколько раз они появляются.Я пытаюсь добавить 1 к значению определенной строки в столбце «Появления», когда он обнаруживает строковое значение, которое уже находится в кадре данных.

 df = pd.read_csv(Location)


print(len(elem))

while counter < 50:

    #gets just the subreddit name
    e = str(elem[counter].get_attribute("href"))
    e = e.replace("https://www.reddit.com/r/", "")
    e = e[:-1]

    inDf = None

    if (any(df.Subreddit == e)):
        print("Y")
        inDf = True

    if inDf:
        #adds 1 to the value of Appearances
        #df.set_value(e, 'Appearances', 2, takeable=False)
        #df.at[e, 'Appearances'] +=1
    else:
        #adds new row with the subreddit name and sets the amount of appearances to 1.
        df = df.append({'Subreddit': e, 'Appearances': 1}, ignore_index=True)




    print(e)
    counter = counter + 2

print(df)

Единственная часть, которая доставляет мне проблемы, этоif inDF раздел.Я не могу понять, как добавить 1 к «Появлениям» субредита.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Ваша логика здесь немного запутанная, вам не нужно 3 ссылки на inDF, вам не нужно создавать экземпляр с помощью None или использовать встроенный any с объектом pd.Series.

Вы можете проверить, существует ли значение в серии, с помощью оператора in:

if e in df['Subreddit'].values:
    df.loc[df['Subreddit'] == e, 'Appearances'] += 1
else:
    df = df.append({'Subreddit': e, 'Appearances': 1}, ignore_index=True)

Еще лучше, используйте defaultdict в цикле и создайте свой фрейм данных в самом концепроцесс.Ваше текущее использование pd.DataFrame.append не рекомендуется, так как дорогая операция повторяется для каждой строки.

from collections import defaultdict

#initialise dictionary
dd = defaultdict(int)

while counter < 50:
    e = ...                  # gets just the subreddit name
    dd[e] += 1               # increment count by 1
    counter = counter + 2    # increment while loop counter

# create results dataframe
df = pd.DataFrame.from_dict(dd, orient='index').reset_index()

# rename columns
df.columns = ['Subreddit', 'Appearances']
0 голосов
/ 06 октября 2018

Вы можете использовать df.loc[df['Subreddits'] == e, 'Appearances'] += 1

пример:

df = pd.DataFrame(columns=['Subreddits', 'Appearances'])
e_list = ['a', 'b', 'a', 'a', 'b', 'c']
for e in e_list:
    inDF = (df['Subreddits'] == e).sum() > 0
    if inDF:
        df.loc[df['Subreddits'] == e, 'Appearances'] += 1
    else:
        df = df.append([{'Subreddits': e, 'Appearances': 1}])
df.reset_index(inplace=True, drop=True) # good idea to reset the index..
print(df)

  Subreddits Appearances
0          a           3
1          b           2
2          c           1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...