繁体   English   中英

Python:根据条件将行添加到数据框

[英]Python: Adding rows to dataframe based on conditions

我有以下表格/数据框

 Year    Period    Amount 
 2010      1         10
 2010      2         5
 2010      4         6
 2010      5         9
 2011      1         10
 2011      3         5
 2011      4         3

如您所见,“期间”列中有缺失的期间。 我想为每一年添加一行,其缺失的时期为0。我还希望这些时期继续到我定义的数字,例如6。因此,结果数据框应为:

 Year    Period    Amount 
 2010      1         10
 2010      2         5
 2010      3         0
 2010      4         6
 2010      5         9 
 2010      6         0
 2011      1         10 
 2011      2         0 
 2011      3         5
 2011      4         3
 2011      5         0
 2011      6         0

这是我对运行代码的回答。

1.为示例设置变量

In [1]:
data = [[2010, 1, 10], [2010, 2, 5], [2010, 4, 6], [2010, 5, 9], [2011, 1, 10], [2011, 3, 5], [2011, 4, 3]]
df = pd.DataFrame(data, columns = ['Year', 'Period', 'Amount'])
df
Out[1]:
    Year    Period  Amount
0   2010    1       10
1   2010    2       5
2   2010    4       6
3   2010    5       9
4   2011    1       10
5   2011    3       5
6   2011    4       3

2.创建一个函数以添加符合条件的行

在此期间的默认值是6,您可以将其更改为所需的任何值。

In [2]:
def add_row(df, periods=6):
    years = df.Year.unique().tolist()
    for year in years:
        for i in range(periods):

            if len(df[(df['Period']==i+1) & (df['Year']==year)])==0:
                """ If the Period for the year doesn't exist, we add a row"""
                df.loc[-1] = [year, i+1, 0]
                df.index = df.index + 1 

    return df.sort_values(by=['Year', 'Period']).reset_index().drop(axis=1, columns=['index'])

3.使用功能进行更改

In [3]: add_row(df)
Out [3]:
    Year    Period  Amount
0   2010    1   10
1   2010    2   5
2   2010    3   0
3   2010    4   6
4   2010    5   9
5   2010    6   0
6   2011    1   10
7   2011    2   0
8   2011    3   5
9   2011    4   3
10  2011    5   0
11  2011    6   0
In [4]: add_row(df, periods=10)
Out [4]:
    Year    Period  Amount
0   2010    1   10
1   2010    2   5
2   2010    3   0
3   2010    4   6
4   2010    5   9
5   2010    6   0
6   2010    7   0
7   2010    8   0
8   2010    9   0
9   2010    10  0
10  2011    1   10
11  2011    2   0
12  2011    3   5
13  2011    4   3
14  2011    5   0
15  2011    6   0
16  2011    7   0
17  2011    8   0
18  2011    9   0
19  2011    10  0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM