【问题标题】:Pandas: Selecting value from preceding row and different columnPandas:从前一行和不同列中选择值
【发布时间】:2017-12-08 06:43:51
【问题描述】:

我需要从现有数据框创建一个新数据框。下面的例子将解释我的意思。对于 column2 和 column3 中的每个值,我需要创建一个新行,其中包含前面 column1 中的值。我不确定如何使用 pandas 选择该值。

index column1 column2 column3
  0    shop1
  1             34       0
  2             32       0
  3             35       1
  4    shop2
  5             52       1
  6             57       0

结果数据框:

index column1 column2 column3
  0    shop1    34       0
  1    shop1    32       0
  2    shop1    35       1
  3    shop2    52       1
  4    shop2    57       0

我已经搜索了 stackoverflow 和 pandas 文档,但找不到如何执行此操作。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • column1.fillna(method='ffill') 然后删除column2column3 中具有空值的行怎么样?
  • 该死,这实际上非常简单......我不敢相信我什至没有想到这一点。非常感谢!

标签: python pandas numpy dataframe


【解决方案1】:

使用ffill()dropna

df.assign(column1=df.column1.ffill()).dropna()

输出:

   index column1  column2  column3
1      1   shop1     34.0      0.0
2      2   shop1     32.0      0.0
3      3   shop1     35.0      1.0
5      5   shop2     52.0      1.0
6      6   shop2     57.0      0.0

而且,如果你想清理索引:

df.assign(column1=df.column1.ffill()).dropna().drop('index',1).reset_index(drop=True)

  column1  column2  column3
0   shop1     34.0      0.0
1   shop1     32.0      0.0
2   shop1     35.0      1.0
3   shop2     52.0      1.0
4   shop2     57.0      0.0

【讨论】:

    【解决方案2】:

    如果这些是空白,您需要先填写 N/A

    import pandas as pd
    
    df = pd.DataFrame(dict(column1=["shop1","","","shop2",""],column2=["",34,32,"",35]))
    df = df.mask(df == '')
    df.column1 = df.column1.fillna(method='pad')
    df = df.dropna(axis=0,how='any').reset_index(drop=True)
    
    print(df)
    

    返回:

      column1 column2
    0   shop1      34
    1   shop1      32
    2   shop2      35
    

    【讨论】:

      猜你喜欢
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2017-01-14
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多