我有一个如下所示的数据框:
Name width height breadth
0 1 13 90 2
1 2 101 45 1
2 3 78 6 1
3 5 11 34 1
4 6 23 8 2
就像看到的一样,名称不是按顺序排列的。之间缺少文件。 如果名称按顺序排列,我想将宽度和高度的列值下移一行。如果不是,我想将行的宽度和高度填充为NaN。
我尝试了以下代码:
diff=data['Name'].diff()
,并尝试使用此diff值来进行group_。但这没用。
我期望得到如下结果:
Name width height breadth
0 1 NaN Nan 2
1 2 13 90 1
2 3 101 45 1
3 5 Nan Nan 1
4 6 11 34 2
答案 0 :(得分:1)
按Series.diff
为组创建助手系列,按Series.ne
和Series.cumsum
比较并将其传递给DataFrameGroupBy.shift
:
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(DATA_SOURCE_NAME);
Map<String, Object> properties = new HashMap<>();
properties.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, ds);
entityManagerFactory = Persistence.createEntityManagerFactory(
PERSISTENCE_UNIT_NAME, properties);
答案 1 :(得分:0)
您可以使用临时数据框添加空行并移动值:
temp = pd.DataFrame({'Name': np.arange(
data.Name.min(), data.Name.max() + 1)}).merge(data, on='Name', how='left')
temp.iloc(axis=1)[1:] = temp.iloc(axis=1)[1:].shift()
result = pd.DataFrame(data.Name).merge(temp , on='Name')