为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫:从另一列填充分区中的第一行?

熊猫:从另一列填充分区中的第一行?

慕虎7371278 2022-05-24 16:26:54
我有以下数据框,我想在Inventory列上的 groupby 用Product列的相邻行的值填充列的第一个空单元格Stock。   Year  Week Product  Stock  Inventory0  2019    21       A     10        NaN1  2019    22       A     10       34.02  2019    23       A     10        NaN3  2019    24       A     10       28.04  2019    25       C     20        NaN5  2019    26       C     20       39.06  2019    27       C     20        NaN7  2019    28       B     35        NaN8  2019    29       B     35        NaN9  2019    30       B     35       94.0最终输出应如下所示   Year  Week Product  Stock  Inventory0  2019    21       A     10       10.01  2019    22       A     10       34.02  2019    23       A     10        NaN3  2019    24       A     10       28.04  2019    25       C     20       20.05  2019    26       C     20       39.06  2019    27       C     20        NaN7  2019    28       B     35       35.08  2019    29       B     35        NaN9  2019    30       B     35       94.0数据import pandas as pdimport numpy as npdata = {    "Year": [2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019],    "Week": [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],    "Product": ["A", "A", "A", "A", "C", "C", "C", "B", "B", "B"],    "Stock": [10, 10, 10, 10, 20, 20, 20, 35, 35, 35],    "Inventory": [np.NaN, 34, np.NaN, 28, np.NaN, 39, np.NaN, np.NaN, np.NaN, 94]}df = pd.DataFrame(data)print(df)
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

这是使用combine_first之后的一种方法drop_duplicates


df.Inventory=df.Inventory.combine_first(df.drop_duplicates(['Product']).Stock)

df

Out[193]: 

   Year  Week Product  Stock  Inventory

0  2019    21       A     10       10.0

1  2019    22       A     10       34.0

2  2019    23       A     10        NaN

3  2019    24       A     10       28.0

4  2019    25       C     20       20.0

5  2019    26       C     20       39.0

6  2019    27       C     20        NaN

7  2019    28       B     35       35.0

8  2019    29       B     35        NaN

9  2019    30       B     35       94.0


查看完整回答
反对 回复 2022-05-24
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

鉴于产品组合在一起,您可以使用您的逻辑来更新库存:


first_with_na = (df.Product.ne(df.Product.shift()) # first product row

                 & df.Inventory.isna()             # Inventory is na

                )


df.loc[first_with_na, 'Inventory'] = df.Stock

输出:


   Year  Week Product  Stock  Inventory

0  2019    21       A     10       10.0

1  2019    22       A     10       34.0

2  2019    23       A     10        NaN

3  2019    24       A     10       28.0

4  2019    25       C     20       20.0

5  2019    26       C     20       39.0

6  2019    27       C     20        NaN

7  2019    28       B     35       35.0

8  2019    29       B     35        NaN

9  2019    30       B     35       94.0


查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信