[英]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.