заполнение столбцов информацией из другого файла в зависимости от условия - PullRequest
1 голос
/ 10 марта 2020

Итак, есть 2 CSV-файла, с которыми я работаю: файл 1:

City     KWR1 KWR2 KWR3

Killeen
Killeen
Houston
Whatever

файл2:

location link                      reviews
Killeen  www.example.com           300
Killeen  www.differentexample.com  200
Killeen  www.example3.com          100
Killeen  www.extraexample.com      20

Вот что я пытаюсь заставить этот код сделать: посмотрите на ' City 'в файле один, возьмите 3 верхние ссылки в файле 2 (вы можете go вперед и предположите, что города не будут перепутаны), а затем поместите эти топ 3 в столбцы KWR1 KWR2 KWR3 для всех тех же значений' City ' .

, поэтому он получает верхние 3, а затем просто копирует их справа от всех значений одного и того же «города».

мне даже трудно правильно задать этот вопрос, надеюсь, я предоставил достаточно информации. я знаю, как читать файл с pandas и все такое, просто не могу кодировать эту точную ситуацию в ...

1 Ответ

0 голосов
/ 10 марта 2020

Это немного необычное требование, но я думаю, что вам нужно выполнить три шага: 1. Оставьте только первые три значения, которые вам действительно нужны.

df = df.sort_values(by='reviews',ascending=False).groupby('location').head(3).reset_index()

Будем надеяться, что в каждом городе останутся только первые три. Затем вам нужно как-то пометить свои данные, возможно, есть лучшие способы сделать это, но есть один способ: - Вы назначаете новый столбец с числами и создаете пользовательскую функцию

import numpy as np
df['nums'] = np.arange(len(df))

Теперь у вас есть столбец, полный цифр (вроде номеров строк). Затем вы создаете свою функцию, которая будет метить ваши данные ...

def my_func(index):
    if index % 3  ==0 :
        x = 'KWR' + str(1)
    elif index % 3 == 1:
        x = 'KWR' + str(2)
    elif index % 3 == 2:
        x = 'KWR' + str(3)
    return x    

Затем вы можете создать нужные вам метки:

df['labels'] = df.nums.apply(my_func)

Затем вы можете сделать:

my_df = pd.pivot_table(df, values='reviews', index=['location'], columns='labels', aggfunc='max').reset_index()

, который буквально вытаскивает метки (точки разворота) и помещает значения в нужные места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...