Pandas:从前一行和不同列中选择值

2024-09-28 20:52:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从一个现有的数据帧中创建一个新的数据帧。下面的例子将解释我的意思。对于第2列和第3列中的每个值,我需要创建一个新行,其中包含位于它前面的第1列中的值。我不知道如何使用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文档,但找不到如何做到这一点。谢谢您的帮助。你知道吗


Tags: 数据文档pandasindexstackoverflow例子column1column2
2条回答

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

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

相关问题 更多 >