Как добавить значение в ячейку в панде - PullRequest
0 голосов
/ 07 марта 2019

У меня есть фрейм данных, в котором я создаю новый столбец и заполняю его значение. Исходя из условия, к новому столбцу необходимо добавить некоторые значения, если эта строка встретится снова.

Например, для данного кадра данных:

DF

id   Stores                  is_open
1   'Walmart', 'Target'      true
2   'Best Buy'               false
3   'Target'                 true
4   'Home Depot'             true

Теперь, если я хочу добавить новый столбец как Ticker, который может быть строкой тикеров или списком через запятую (в зависимости от того, что предпочтительнее и проще. Никаких предпочтений на моем конце) для заданных магазинов, разделенных запятыми.

Так, например, тикер Walmart wmt и цель tgt. Данные wmt и tgt, которые я получаю из другого фрейма данных на основе соответствующего ключа, поэтому я попытался добавить их следующим образом, но не все из них назначены, даже если они имеют значения, а для * назначено только одно значение, за которым следует запятая Tickers столбец и не несколько:

df['Tickers'] = '' 
for _, row in df.iterrows():
        stores = row['Stores']
        list_stores = stores(',')
        if len(list_stores) > 1:
            for store in list_stores:
                tmp_df = second_df[second_df['store_id'] == store]

                ticker = tmp_df['Ticker'].values[0] if len(tmp_df['Ticker'].values) > 0 else None

                if ticker:
                    df.loc[
                      df['Stores'].astype(str).str.contains(store), 'Ticker'] += '{},'.format(ticker)

Ожидаемый результат:

id   Stores                  is_open      Ticker
1   'Walmart', 'Target'      true         wmt, tgt
2   'Best Buy'               false        bby
3   'Target'                 true         tgt
4   'Home Depot'             true         nan

Я был бы очень признателен, если бы кто-нибудь мог помочь мне здесь.

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете использовать метод apply с axis=1, чтобы передать строку и выполнить вычисления. Смотрите код ниже:

import pandas as pd
mydict = {'id':[1,2],'Store':["'Walmart','Target'","'Best Buy'"], 'is_open':['true', 'false']}
df = pd.DataFrame(mydict, index=[0,1])
df.set_index('id',drop=True, inplace=True)

Пока df:

                 Store is_open
id                            
1   'Walmart','Target'    true
2           'Best Buy'   false

Фрейм данных поиска:

df2 = pd.DataFrame({'Store':['Walmart', 'Target','Best Buy'], 'Ticker':['wmt','tgt','bby']})
      Store Ticker
0   Walmart    wmt
1    Target    tgt
2  Best Buy    bby

вот код для добавления столбца:

def add_column(row):

    items = row['Store'].split(',')

    tkr_list = []

    for string in items:
        mystr = string.replace("'","")

        tkr = df2.loc[df2['Store']==mystr,'Ticker'].values[0]

        tkr_list.append(tkr)

    return tkr_list


df['Ticker']=df.apply(add_column, axis=1)

и это результат для df:

                 Store is_open      Ticker
id                                        
1   'Walmart','Target'    true  [wmt, tgt]
2           'Best Buy'   false       [bby]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...