根据先前的值在数据框中创建下一行
Create next rows in dataframe based on values from previous
我的 df 如下所示
id number
123 1
256 2
879 3
132 4
3215 5
216 6
输出应该是这样的:
id number
123 1
256 2
879 3
132 4
3215 5
216 6
NaN 7
NaN 8
NaN 9
NaN 10
所以基本上我需要在列号和列 id 的前一行中添加 1,不应该有任何值。我需要 30 个新行。我试过这个:
n = 30
for i in range(n):
df = df.append(df.tail(1).add(1))
但结果不正确。你有什么想法?感谢帮助。
问候
托马斯
试试 set_index
和 reindex
:
>>> df.set_index('number').reindex(range(11)).reset_index()
number id
0 0 NaN
1 1 123.0
2 2 256.0
3 3 879.0
4 4 132.0
5 5 3215.0
6 6 216.0
7 7 NaN
8 8 NaN
9 9 NaN
10 10 NaN
>>>
您可以 set_index
、reindex
和 reset_index
:
df.set_index('number').reindex(range(1, 11)).reset_index()
输出:
number id
0 1 123.0
1 2 256.0
2 3 879.0
3 4 132.0
4 5 3215.0
5 6 216.0
6 7 NaN
7 8 NaN
8 9 NaN
9 10 NaN
如果要保持列顺序:
cols = df.columns
df.set_index('number').reindex(range(1, 11)).reset_index()[cols]
id number
0 123.0 1
1 256.0 2
2 879.0 3
3 132.0 4
4 3215.0 5
5 216.0 6
6 NaN 7
7 NaN 8
8 NaN 9
9 NaN 10
A merge
是另一个有效的选项,并保持列顺序:
df.merge(pd.Series(range(1,11), name = 'number'),how = 'right')
id number
0 123.0 1
1 256.0 2
2 879.0 3
3 132.0 4
4 3215.0 5
5 216.0 6
6 NaN 7
7 NaN 8
8 NaN 9
9 NaN 10
我的 df 如下所示
id number
123 1
256 2
879 3
132 4
3215 5
216 6
输出应该是这样的:
id number
123 1
256 2
879 3
132 4
3215 5
216 6
NaN 7
NaN 8
NaN 9
NaN 10
所以基本上我需要在列号和列 id 的前一行中添加 1,不应该有任何值。我需要 30 个新行。我试过这个:
n = 30
for i in range(n):
df = df.append(df.tail(1).add(1))
但结果不正确。你有什么想法?感谢帮助。 问候 托马斯
试试 set_index
和 reindex
:
>>> df.set_index('number').reindex(range(11)).reset_index()
number id
0 0 NaN
1 1 123.0
2 2 256.0
3 3 879.0
4 4 132.0
5 5 3215.0
6 6 216.0
7 7 NaN
8 8 NaN
9 9 NaN
10 10 NaN
>>>
您可以 set_index
、reindex
和 reset_index
:
df.set_index('number').reindex(range(1, 11)).reset_index()
输出:
number id
0 1 123.0
1 2 256.0
2 3 879.0
3 4 132.0
4 5 3215.0
5 6 216.0
6 7 NaN
7 8 NaN
8 9 NaN
9 10 NaN
如果要保持列顺序:
cols = df.columns
df.set_index('number').reindex(range(1, 11)).reset_index()[cols]
id number
0 123.0 1
1 256.0 2
2 879.0 3
3 132.0 4
4 3215.0 5
5 216.0 6
6 NaN 7
7 NaN 8
8 NaN 9
9 NaN 10
A merge
是另一个有效的选项,并保持列顺序:
df.merge(pd.Series(range(1,11), name = 'number'),how = 'right')
id number
0 123.0 1
1 256.0 2
2 879.0 3
3 132.0 4
4 3215.0 5
5 216.0 6
6 NaN 7
7 NaN 8
8 NaN 9
9 NaN 10