Pandas Dataframe基于前一行限制为该列中的最大值,为新列添加值

时间:2013-12-18 09:28:43

标签: python pandas dataframe

很难了解大熊猫的所有技巧或使用数据帧。

所以我列出了一定数周的df。我想要创建一个度量表或数据框,其中添加了添加了连续递增周的其他列,只添加了行,将行填充到“周”列中的最大周列表

       Week
 0    201152
 1    201201
 2    201202
 3    201203
 4    201204

以下df是我想要的结果。

       Week  2ndWeek 3rdWeek 4thWeek 5thWeek 
 0    201152  201201  201202  201203  201204
 1    201201  201202  201203  201204
 2    201202  201203  201204  
 3    201203  201204  
 4    201204  

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

import pandas as pd
ts = df.Week
for week in range(len(ts) - 1):
    ts = ts.drop(ts.idxmin())
    ts.index = pd.Index(range(len(ts)))
    ts.name = '%s_Week' % week
    df = df.merge(pd.DataFrame(ts), left_index=True,right_index=True, how='outer')

答案 1 :(得分:0)

对于类似的内容,您可以使用shift和循环。你可以提取一些索引技巧,但这不太可能成为瓶颈,所以我们也可能很简单。

>>> df = pd.DataFrame({"Week": [201152, 201201, 201202, 201203, 201204]})
>>> df
     Week
0  201152
1  201201
2  201202
3  201203
4  201204

[5 rows x 1 columns]
>>> for n in range(2, len(df)+1):
...     df["{}_Week".format(n)] = df["Week"].shift(-(n-1))
...     
>>> df
     Week  2_Week  3_Week  4_Week  5_Week
0  201152  201201  201202  201203  201204
1  201201  201202  201203  201204     NaN
2  201202  201203  201204     NaN     NaN
3  201203  201204     NaN     NaN     NaN
4  201204     NaN     NaN     NaN     NaN

[5 rows x 5 columns]

如果你真的想要''而不是NaN,你可以添加.fillna(''),但即使它们看起来不那么好,算术也会更好用{{} 1}} s,因为它们被许多例程解释为缺失值。