【问题标题】:How to do intersection of dataframes in pandas如何在熊猫中进行数据框的交集
【发布时间】:2018-06-04 20:25:50
【问题描述】:

我有一个如下的数据框:

<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 和状态列覆盖原始数据帧数量?

如果可以通过合并来实现,该怎么做?我不熟悉 'inner' 、 'left' 等 SQL 合并词...

目的:

我正在像这样修改原始 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 和 State 列匹配的新 DF(新 DF 的数量列是我在最终数据框中想要的)。

【问题讨论】:

    标签: python pandas dataframe data-analysis


    【解决方案1】:

    我相信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
    

    【讨论】:

      猜你喜欢
      • 2018-01-23
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多