我有以下表格/数据框
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
答案 0 :(得分:2)
这是我运行代码的答案。
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
在此期间的默认值是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'])
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