熊猫:从前一行和另一列中选择值

时间:2017-12-07 22:31:07

标签: python pandas numpy dataframe

我需要从现有的数据框中创建一个新的数据框。下面的例子将解释我的意思。对于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文档,但找不到如何执行此操作。感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

使用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

答案 1 :(得分:0)

如果这些是空白,你需要先做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