![](/img/trans.png)
[英]Python Pandas Dataframe calculating new row value based on previous row value within same column
[英]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.