[英]How to subtract the previous rows column from current column and create a new dimension in the array with this value using numpy?
[英]How do I create a column with a previous value (in column B) when the names (in column A) in current and previous rows matches?
我想创建一个新列,复制“值”列中的值,该值对应于“名称”列中的同一个人,但来自具有相同名称的前一行。 当那个人没有以前的值时,我想留下一个空字符串。
我尝试使用此代码,但它不起作用:
previous_value= []
col_list = df['Name'].values.tolist()
for idx in df.index:
last_name= df['Name'].loc[idx]
last_value= df['Value'].loc[idx]
for i in range(len(col_list)-1):
actual_name= col_list[i+1]
if last_name == actual_name:
previous_value.append(last_value)
else:
previous_followers.append("")
我的想法是稍后将 previous_value 列表转换为数据框,然后将其添加到原始数据框。
它应该是这样的:
Name Value Previous_value
1 Andrew 12
2 Marco 10
3 Philips 9
4 Andrew 8 12
5 Oscar 7
6 Peter 15
7 Maria 25
8 Marco 3 10
9 Andrew 7 8
10 Oscar 19 7
11 Oscar 21 19
12 Maria 2 25
谢谢
这个问题之前在这里得到了回答。 您可以使用groupby
和shift
来实现此目的(尽管默认情况下您将获得第一个条目的 NaN,而不是空字符串。
df = pd.DataFrame({'Name':[1,2,3,1,2,3,1,2,3],'Value':[0,1,2,3,4,5,6,7,8]})
df['Previous_Value'] = df.groupby('Name')['Value'].shift()
For 循环通常不能很好地与 pandas 混合使用。在这种情况下,您希望按名称分组,然后将值向下移动一个以创建先前的值列。 这应该可以解决问题:
>>> df['previous_value'] = df.groupby('Name')['Value'].shift()
>>> df
Name Value previous_value
0 Andrew 12 NaN
1 Marco 10 NaN
2 Philips 9 NaN
3 Andrew 8 12.0
4 Oscar 7 NaN
5 Peter 15 NaN
6 Maria 25 NaN
7 Marco 3 10.0
8 Andrew 9 8.0
9 Oscar 19 7.0
10 Oscar 21 19.0
11 Maria 2 25.0
然后,如果需要,您可以在新列上使用fillna('')
将 NaN 替换为空字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.