根据不同列

时间:2016-07-19 18:02:48

标签: python pandas

我有一个包含多个产品的销售订单的数据框(下面是原始数据框)。我需要创建第二个数据框,显示销售订单,销售订单是否只有一个产品(独立),以及产品名称。任何有关如何实现这一目标的帮助将不胜感激。谢谢帮派!

原始数据帧:

<table><tbody>
  <tr><th> </th><th>A</th><th>B</th></tr>
  <tr><td>1</td><td>Sales Order</td><td>Product</td></tr>
  <tr><td>2</td><td>1111</td><td>Software</td></tr>
  <tr><td>3</td><td>1111</td><td>Support</td></tr>
  <tr><td>4</td><td>2222</td><td>Hardware</td></tr>
  <tr><td>5</td><td>3333</td><td>Software</td></tr>
  <tr><td>6</td><td>4444</td><td>Hardware</td></tr>
  <tr><td>7</td><td>4444</td><td>Software</td></tr>
</tbody></table>

期望的输出:

<table><tbody>
  <tr><th> </th><th>A</th><th>B</th><th>C</th></tr>
  <tr><td>1</td><td>Sales Order</td><td>Standalone</td><td>Product (SA)</td></tr>
  <tr><td>2</td><td>1111</td><td>No</td><td>Not SA</td></tr>
  <tr><td>3</td><td>2222</td><td>Yes</td><td>Hardware</td></tr>
  <tr><td>4</td><td>3333</td><td>Yes</td><td>Software</td></tr>
  <tr><td>5</td><td>4444</td><td>No</td><td>Not SA</td></tr>
</tbody></table>

  • SA代表Standalone

1 个答案:

答案 0 :(得分:0)

所以你的起始DataFrame看起来像是:

  Sales Order   Product
0        1111  Software
1        1111   Support
2        2222  Hardware
3        3333  Software
4        4444  Hardware
5        4444  Software

首先create a new DataFrame来保存您的搜索结果。

res = pd.DataFrame(index=df['Sales Order'].unique(), columns=['Standalone', 'Product'])

然后填充它。这可以通过几种方式完成。以下是使用DataFrame.groupby的方法。

for sales_order, dft in df.groupby('Sales Order'):
    standalone = 'Yes' if len(dft) == 1 else 'No'
    product = dft.iloc[0, 1] if len(dft) == 1 else 'Not SA'
    res.loc[sales_order] = [standalone, product]