2016-07-19 3 views
0

У меня есть блок данных с заказами на продажу, которые имеют несколько продуктов (исходный формат данных ниже). Мне нужно создать второй блок данных, показывающий заказы на продажу, независимо от того, имеет ли заказ на продажу только один продукт или нет (автономный) и название продукта. Любая помощь в том, как это сделать, будет очень признательна. Спасибо, банда!Выберите значения в столбце на основе нескольких строк в другом столбце

Оригинал dataframe:

<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
+2

Добро пожаловать в StackOverflow. Что вы пытались это сделать? С какими проблемами вы столкнулись? – YakovL

ответ

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]