繁体   English   中英

Pandas Dataframe基于前一行,将值添加到新列,但该列的最大值限于该列

[英]Pandas Dataframe Add a value to a new Column based on the previous row limited to the maximum value in that column

学习熊猫的所有技巧或使用数据框非常困难。

所以我有一个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  

有任何想法吗?

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')

对于这样的事情,您可以使用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('') ,但是即使它们看起来不太好,算术也可以使用NaN更好地工作,因为它们被解释为缺少值通过许多例程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM