如何根据与python pandas中前一行的差异来移动列值?

时间:2019-05-08 14:10:13

标签: python pandas dataframe

我有一个如下所示的数据框:

      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

2 个答案:

答案 0 :(得分:1)

Series.diff为组创建助手系列,按Series.neSeries.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')