Pandas - 使用一个值填充列中的特定行数

时间:2017-07-11 15:36:00

标签: python pandas numpy dataframe

我有一个40行的DataFrame列,完全由0填充,除了三行上有数字。还有一列只有一个有价值的数字。

new_column new_column2  
0                                                          0              0  
1                                                          0              0  
2                                                          0              0  
3                                                          0              0  
4                                                          0              0  
5                                                          0              0  
6                                                          0              0  
7                                                          0              0  
8                                                          0              0  
9                                                          0              0  
10                                                       NaN     $21,151.67  
11                                                         0              0  
12                                                         0              0  
13                                                         0              0  
14                                                         0              0  
15                                                         0              0  
16                                                         0              0  
17                                                         0              0  
18                                                         0              0  
19                                                         0              0  
20                                                         0              0  
21                                                         0              0  
22                                                         0              0  
23                                                         0              0  
24                                                         0              0  
25                                                $58,500.00           None  
26                                                         0              0  
27                                                         0              0  
28                                                         0              0  
29                                                         0              0  
30                                                         0              0  
31                                                         0              0  
32                                                         0              0  
33                                                         0              0  
34                                                         0              0  
35                                                         0              0  
36                                                         0              0  
37                                                         0              0  
38                                                         0              0  
39                                                         0              0  
40                                                $57,750.00           None  

是否可以获取这些数量的值并用它们填充列,直到它们再次出现有价值的数字?

因此$21,151.67将填充第1行到第10行的所有行。

$50,500.00将填充第11-25行的所有行。

$57,750.00会填写25-40行。

我知道我可以执行一个简单的命令,例如此处列出的命令(How do I fill a column with one value in Pandas?)来填充列,但是这些数字会在我运行代码的每个文件上发生变化,因此需要足够强大,可以随意取出任何数字,并将它们对齐在正确的行中。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

0和“无”替换为实际缺失值,然后沿行向前填充缺失值:

df[(df == '0') | (df == 'None')] = None
df = df.fillna(method = 'ffill', axis=1)

现在df['new_column2']包含您要回填的值。因此,只需使用backfill fillna()方法填补空白。

df['new_column2'] = df['new_column2'].fillna(method = 'backfill')
df['new_column'] = df['new_column2']

给出:

    new_column new_column2
0   $21,151.67  $21,151.67
1   $21,151.67  $21,151.67
2   $21,151.67  $21,151.67
3   $21,151.67  $21,151.67
4   $21,151.67  $21,151.67
5   $21,151.67  $21,151.67
6   $21,151.67  $21,151.67
7   $21,151.67  $21,151.67 
8   $21,151.67  $21,151.67
9   $21,151.67  $21,151.67
10  $21,151.67  $21,151.67
11  $58,500.00  $58,500.00
12  $58,500.00  $58,500.00
       ...          ...

答案 1 :(得分:0)

Pandas fillna功能为您提供了一个选项,可以将填充后退或前移到下一个/最后一个有效观察。 对于您的情况,您需要将None和NaN替换为有效值,然后将0替换为无效值(意味着np.nan)。然后你可以使用fillna和向后填充。

df[['foo', 'bar']].fillna('anker', inplace=True)
df[['foo', 'bar']].replace({0:np.nan})
df[['foo', 'bar']].fillna(methode='bfill')

然后可以用您关心的任何值替换剩余的anker值。

希望有所帮助。

答案 2 :(得分:0)

您可以使用.iloc方法并根据需要对索引范围进行切片 - 请参阅下面的代码段。

import pandas as pd

df = pd.DataFrame(index=range(0, 40), columns=['new_column', 'new_column2'],
                  dtype='float')

df.iloc[0:10] = 21156.67
df.iloc[10:25] = 50500.00
df.iloc[25:40] = 57750.00

希望这就是你要找的东西。