Как сделать пересечение датафреймов в пандах - PullRequest
0 голосов
/ 04 июня 2018

У меня есть датафрейм, подобный следующему:

<table border="1" class="dataframe">  <thead>    <tr style="text-align: right;">      <th></th>      <th>Title</th>      <th>ASIN</th>      <th>State</th>      <th>SellerSKU</th>      <th>Quantity</th>      <th>FBAStock</th>      <th>QuantityToShip</th>    </tr>  </thead>  <tbody>    <tr>      <th>1</th>      <td>Daedal crafters- Pack of Two Gajra (Orange and...</td>      <td>B075T64ZWJ</td>      <td>WEST BENGAL</td>      <td>DC216</td>      <td>1</td>      <td>0</td>      <td>1</td>    </tr>    <tr>      <th>2</th>      <td>Daedal Dream Catchers - Intricate Web Design(B...</td>      <td>B06XBRRYVK</td>      <td>KARNATAKA</td>      <td>DDC63BB</td>      <td>1</td>      <td>24</td>      <td>0</td>    </tr>    <tr>      <th>3</th>      <td>Daedal Dream Catchers- Blue and White Four Rin...</td>      <td>B07428QBJ9</td>      <td>MAHARASHTRA</td>      <td>12-16RT-1H8B</td>      <td>1</td>      <td>4</td>      <td>0</td>    </tr>    <tr>      <th>4</th>      <td>Daedal dream catchers- Crescent wine DDC21</td>      <td>B01DI70P9W</td>      <td>UTTAR PRADESH</td>      <td>70-PK4Z-6VSP</td>      <td>1</td>      <td>10</td>      <td>0</td>    </tr>  </tbody></table>

Столбцы:

Title   ASIN    State   SellerSKU   Quantity    FBAStock    QuantityToShip 

У меня есть другой фрейм данных, который содержит подмножество строк вышеупомянутого фрейма данных, но только столбец «Количество»изменен в этом кадре данных и имеет столбцы

ASIN State Quantity

Как я пересекаю или объединяю этот меньший кадр данных с первым кадром данных так, что Количество меньшего кадра данных перезаписывает исходное количество кадра данных путем сопоставления столбцов ASIN и State?

Если это можно сделать путем слияния, как это сделать?Я не знаком со словами слияния SQL, такими как 'inner', 'left' и т. Д. *

Цель:

Я изменяю исходный DF следующим образом:

new = originalDF.groupby(['State' ,'ASIN' , 'Quantity']).size().reset_index().rename(columns= {0 : 'Count'})

new.Quantity = new[['Quantity' , 'Count']].apply(lambda tup : tup[0]*tup[1] , axis = 1)
new.drop(['Count'] , axis =1 , inplace=True)

Теперь я хочу поместить столбцы originalDF в новый DF, соответствующий столбцам ASIN и состоянию нового DF (столбец количества нового DF - это то, что я хочу в конечном кадре данных).

1 Ответ

0 голосов
/ 04 июня 2018

Я считаю, что хотите transform для нового столбца по size для групп с несколькими столбцами Quantity по *=:

originalDF = pd.DataFrame({'State':list('aaabbb'),
                           'ASIN':list('cfcccc'),
                           'Quantity':[100] * 6})


originalDF['Quantity'] *= (originalDF.groupby(['State' ,'ASIN' , 'Quantity'])['State']
                                    .transform('size'))

print (originalDF)
  State ASIN  Quantity
0     a    c       200
1     a    f       100
2     a    c       200
3     b    c       300
4     b    c       300
5     b    c       300

Подробности :

print ((originalDF.groupby(['State' ,'ASIN' , 'Quantity'])['State']
                                    .transform('size')))

0    2
1    1
2    2
3    3
4    3
5    3
Name: State, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...