使用 .loc 和 shift() 将序列号加一
Using .loc and shift() to add one to a serialnumber
我正在尝试使用轴 = 0 的 concat 添加两个数据帧,因此列保持不变但索引增加。其中一个数据框包含一个带有序列号的特定列(从一个向上 - 但不一定按顺序排列,例如 1,2,3,4,5 等)
import pandas as pd
import numpy as np
a = pd.DataFrame(data = {'Name': ['A', 'B','C'],
'Serial Number': [1, 2,5]} )
b = pd.DataFrame(data = {'Name': ['D','E','F'],
'Serial Number': [np.nan,np.nan,np.nan]})
c = pd.concat([a,b],axis=0).reset_index()
我希望数据帧 C 中的列 'Serial Number' 从 5+1 开始到下一个 6+1。
我尝试了很多方法,例如:
c.loc[c['B'].isna(), 'B'] = c['B'].shift(1)+1
但是好像不行
期望的输出:
| Name | Serial Number|
-------------------------
1 A | 1
2 B | 2
3 C | 5
4 D | 6
5 E | 7
6 F | 8
一个想法是根据缺失值的数量添加最大值并 1
:
a = np.arange(c['Serial Number'].isna().sum()) + c['Serial Number'].max() + 1
c.loc[c['Serial Number'].isna(), 'Serial Number'] = a
print (c)
index Name Serial Number
0 0 A 1.0
1 1 B 2.0
2 2 C 5.0
3 0 D 6.0
4 1 E 7.0
5 2 F 8.0
我正在尝试使用轴 = 0 的 concat 添加两个数据帧,因此列保持不变但索引增加。其中一个数据框包含一个带有序列号的特定列(从一个向上 - 但不一定按顺序排列,例如 1,2,3,4,5 等)
import pandas as pd
import numpy as np
a = pd.DataFrame(data = {'Name': ['A', 'B','C'],
'Serial Number': [1, 2,5]} )
b = pd.DataFrame(data = {'Name': ['D','E','F'],
'Serial Number': [np.nan,np.nan,np.nan]})
c = pd.concat([a,b],axis=0).reset_index()
我希望数据帧 C 中的列 'Serial Number' 从 5+1 开始到下一个 6+1。
我尝试了很多方法,例如:
c.loc[c['B'].isna(), 'B'] = c['B'].shift(1)+1
但是好像不行
期望的输出:
| Name | Serial Number|
-------------------------
1 A | 1
2 B | 2
3 C | 5
4 D | 6
5 E | 7
6 F | 8
一个想法是根据缺失值的数量添加最大值并 1
:
a = np.arange(c['Serial Number'].isna().sum()) + c['Serial Number'].max() + 1
c.loc[c['Serial Number'].isna(), 'Serial Number'] = a
print (c)
index Name Serial Number
0 0 A 1.0
1 1 B 2.0
2 2 C 5.0
3 0 D 6.0
4 1 E 7.0
5 2 F 8.0