【发布时间】:2018-08-14 03:22:20
【问题描述】:
我已经使用 iterrows() 完成了这项工作,但希望有一种更快、更优雅的方式来实现预期的结果。
问题陈述:
我在数据框(df_orders) 的列子集(product1, product2, ...) 中有几行 NaN 和 notnull 值。我想获取该子集中的每个非空值并创建一个新列,其中包含从第一行一直到最后一行的每个值。
示例: 创建一个包含所有订购产品的列。
>>> df_orders = pd.read_csv('orders.csv')
>>> df_orders
OrderNo CustName Product1 Product2 Product3 Product4 Product5
0 20043 Sanjay Singh 131 320 320 131 nan
1 20042 William Sonoma 420 420 131 320 511
2 20041 Maria Alonso 320 420 320 nan nan
3 20040 Jim Beam 511 131 nan nan nan
4 20039 Gunter Grass 320 131 131 131 nan
5 20038 Billy Joe Bob 420 511 511 nan nan
6 20037 Cynthia Silvia Stout 55 12 131 55 12
7 20036 Alan Ginsburg 131 320 320 12 nan
8 20035 Ronald McDonald 131 131 511 nan nan
我正在寻找的结果:
创建一个名为 df_product_list 的新数据框。从 df_orders 中的第一行开始,在 df_product_list 中为每个非空产品列值创建一个新行。
因为来自 Sanjay Singh 的订单排在第一位,并且产品列中有四个非空值,所以 df_product_list 的前四行将是 131、320、320 和 131。
>>> df_product_list
ProdCode
0 131
1 320
2 320
3 131
4 420
5 420
6 131
7 320
8 511
9 320
10 420
11 320
12 511
13 131
14 320
15 131
16 131
17 131
...
...
【问题讨论】: