【问题标题】:Python pandas get previous values rowPython pandas 获取先前的值行
【发布时间】:2022-11-02 00:09:15
【问题描述】:

我用 python pandas 创建了这个数据框:

import numpy as np
import pandas as pd

my_df = pd.DataFrame(
    {'ColumnA':['Value A', '', 'Value B', '', '', 'Value C',''],
     'ColumnB':['', '', '', '', '', '', '']})

数据框如下所示:

    ColumnA | ColumnB
0   Value A | 
1           | 
2   Value B | 
3           | 
4           |  
5   Value C | 
6           | 

为了完成 B 列,我提出了以下条件:

conditions = [
    my_df['ColumnA'] == '',
    my_df['ColumnA'] != '']
result = [my_df['ColumnA'].shift(1),
          my_df['ColumnA']]
my_df['ColumnB'] = np.select(conditions, result)

结果我有这个:

        ColumnA | ColumnB
0     Value A   | Value A
1               | Value A
2     Value B   | Value B
3               | Value B
4               | 
5     Value C   | Value C
6               | Value C

现在我希望列中的所有单元格都像这样填写:

        ColumnA | ColumnB
0       Value A | Value A
1               | Value A
2       Value B | Value B
3               | Value B
4               | Value B
5       Value C | Value C
6               | Value C

谢谢你的建议!

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: python pandas multiple-conditions


【解决方案1】:

使用真正的NaN 值而不是空字符串可以让很多事情变得更容易......

import pandas as pd
import numpy as np

data = {'ColumnA':['Value A', '', 'Value B', '', '', 'Value C',''],
        'ColumnB':['', '', '', '', '', '', '']}
df = pd.DataFrame(data)

# Fix your null values:
df = df.replace('', np.nan)

# You appear to want ColumnB to be ColumnA if it were forward-filled.
df['ColumnB'] = df['ColumnA'].ffill()

print(df)

输出:

   ColumnA  ColumnB
0  Value A  Value A
1      NaN  Value A
2  Value B  Value B
3      NaN  Value B
4      NaN  Value B
5  Value C  Value C
6      NaN  Value C

【讨论】:

    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2021-09-18
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多