Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 9, 2017 15:10:55

_IIOXMEJI_
Зарегистрирован: 2017-09-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Сведение данных из нескольких DataFrame в Pandas

Здравствуйте!
Вопрос такой:

есть 2 pandas DataFrame - df1, df2
в определенные ячейки df2 нужно скопировать данные из определенных ячеек df1. Делаю это так:

 for i in range (0, len (df2)):
    df2.iloc [i, 2] = df1.loc [df2.iloc[i,0], 'Place']
    df2.iloc [i, 3] = df1.loc [df2.iloc[i,0], 'Breakaway']
    df2.iloc [i, 4] = df1.loc [df2.iloc[i,0], 'Backlog']

После запуска выдается следующее предупреждение:

/Users/umerenkogs/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:128: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self._setitem_with_indexer(indexer, value)
/Users/umerenkogs/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

И выполнение кода очень медленное. Читал мануал - ничего не понял. Что нужно исправить?
Вот df1:

Points Place Breakaway Backlog
Team1 13 1 1 0
Team2 12 2 1 -1
Team3 11 3 1 -1

Вот df2:

HomeTeam AwayTeam HomePlace HomeBreakaway HomeBacklog
Team1 Team2
Team2 Team3
Team3 Team1

Отредактировано _IIOXMEJI_ (Сен. 11, 2017 10:35:14)

Офлайн

#2 Сен. 10, 2017 00:46:04

WoMax
Зарегистрирован: 2014-05-26
Сообщения: 124
Репутация: +  9  -
Профиль   Отправить e-mail  

Сведение данных из нескольких DataFrame в Pandas

Не совсем понял как именно там нужно было копировать, вот один из вариантов:
Есть DF с котировками:

 In [5]: quotes
Out[5]: 
        Date   ReprDate   Open   High    Low  Close    Volume
5   736305.0 2016-12-07  46.61  48.94  46.52  48.65  10210334
6   736306.0 2016-12-08  48.60  48.60  47.70  48.05   6239952
7   736307.0 2016-12-09  49.27  50.64  48.74  49.64   9850774
8   736310.0 2016-12-12  49.16  49.34  47.44  47.59   8643546
9   736311.0 2016-12-13  47.94  48.49  47.71  47.84   6147695
10  736312.0 2016-12-14  47.84  48.75  47.80  47.92   5293889
11  736313.0 2016-12-15  48.10  49.95  48.10  48.30   7530837
12  736314.0 2016-12-16  48.61  49.07  47.56  47.63   9299673
13  736317.0 2016-12-19  47.89  48.60  47.74  48.58   4729855
14  736318.0 2016-12-20  48.50  49.50  48.50  49.22   4814999

… и второй пустой DF куда мы хотим сохранять дату и объем.
 In [6]: my_volume
Out[6]: 
Empty DataFrame
Columns: [Date, ReprDate, Volume]
Index: []

Сохраняем записи из первого DF во второй, если объем превышал 7000000:
 In [7]: my_quotes = quotes.loc[quotes['Volume'] > 7000000]
In [8]: for col in ['Date', 'ReprDate', 'Volume']:
   ...:     my_volume[col] = my_quotes[col].values
   ...:     
In [9]: my_volume
Out[9]: 
       Date   ReprDate    Volume
0  736305.0 2016-12-07  10210334
1  736307.0 2016-12-09   9850774
2  736310.0 2016-12-12   8643546
3  736313.0 2016-12-15   7530837
4  736314.0 2016-12-16   9299673

Отредактировано WoMax (Сен. 10, 2017 00:54:55)

Офлайн

#3 Сен. 11, 2017 10:17:05

_IIOXMEJI_
Зарегистрирован: 2017-09-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Сведение данных из нескольких DataFrame в Pandas

Я подредактировал пост. Может так будет яснее.

Офлайн

#4 Сен. 11, 2017 18:23:26

WoMax
Зарегистрирован: 2014-05-26
Сообщения: 124
Репутация: +  9  -
Профиль   Отправить e-mail  

Сведение данных из нескольких DataFrame в Pandas

 In [37]: df1
Out[37]: 
      Points Place Breakaway Backlog
Team1     13     1         1       0
Team2     12     2         1      -1
Team3     11     3         1      -1
In [38]: df2
Out[38]: 
  HomeTeam AwayTeam HomePlace HomeBreakaway HomeBacklog
0    Team1    Team2      None          None        None
1    Team2    Team3      None          None        None
2    Team3    Team1      None          None        None
In [39]: for i, row in df2.iterrows():
   ....:     row['HomePlace'] = df1.loc[row['HomeTeam']]['Place']
   ....:     row['HomeBreakaway'] = df1.loc[row['HomeTeam']]['Breakaway']
   ....:     row['HomeBacklog'] = df1.loc[row['HomeTeam']]['Backlog']
   ....:     
In [40]: df2
Out[40]: 
  HomeTeam AwayTeam HomePlace HomeBreakaway HomeBacklog
0    Team1    Team2         1             1           0
1    Team2    Team3         2             1          -1
2    Team3    Team1         3             1          -1

Отредактировано WoMax (Сен. 11, 2017 18:23:57)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version