使用 python 和這個資料集https://raw.githubusercontent.com/yadatree/AL/main/AK4.csv我想為每個主題創建一個新列,從 0 開始(在第一行)然后減去第 1 行的第 2 行的 SCALE 值,第 2 行的第 3 行,第 3 行的第 4 行等。
但是,如果這產生一個負值,那么就給出 0 的輸出。
編輯:感謝您的回復。那作業得很好。剩下的唯一問題是我想從每個主題重新開始(SUBJECT 列)。每個主題的值的數量不是固定的,因此檢查 SUBJECT 列然后從 0 重新開始將是理想的。 截屏
uj5u.com熱心網友回復:
您可以使用.shift(1)從前一行移動的值創建新列 - 然后您將在同一行中擁有兩個值,您可以減去列。
稍后您可以選擇所有否定結果并分配零
import pandas as pd
data = {
'A': [1, 3, 2, 5, 1],
}
df = pd.DataFrame(data)
df['previous'] = df['A'].shift(1)
df['result'] = df['A'] - df['previous']
print(df)
#df['result'] = df['A'] - df['A'].shift(1)
#print(df)
df.loc[ df['result'] < 0 , 'result'] = 0
print(df)
結果:
A previous result
0 1 NaN NaN
1 3 1.0 2.0
2 2 3.0 -1.0
3 5 2.0 3.0
4 1 5.0 -4.0
A previous result
0 1 NaN NaN
1 3 1.0 2.0
2 2 3.0 0.0
3 5 2.0 3.0
4 1 5.0 0.0
編輯:
如果您使用df['result'] = df['A'] - df['A'].shift(1),那么您將在result不創建 column 的情況下獲得 column previous。
如果你使用.shift(1, fill_value=0),那么它將放在第一行0而不是NaN第一行。
編輯:
您可以使用groupy("SUBJECT")按主題分組,然后在可以放入0第一行的每個組中使用。
import pandas as pd
data = {
'S': ['A', 'A', 'A', 'B', 'B', 'B'],
'A': [1, 3, 2, 1, 5, 1],
}
df = pd.DataFrame(data)
df['result'] = df['A'] - df['A'].shift(1, fill_value=0)
print(df)
df.loc[ df['result'] < 0 , 'result'] = 0
print(df)
all_groups = df.groupby('S')
first_index = all_groups.apply(lambda grp: grp.index[0])
df.loc[first_index, 'result'] = 0
print(df)
結果:
S A result
0 A 1 1
1 A 3 2
2 A 2 -1
3 B 1 -1
4 B 5 4
5 B 1 -4
S A result
0 A 1 1
1 A 3 2
2 A 2 0
3 B 1 0
4 B 5 4
5 B 1 0
S A result
0 A 1 0
1 A 3 2
2 A 2 0
3 B 1 0
4 B 5 4
5 B 1 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/495905.html
標籤:Python CSV 熊猫-groupby 行
上一篇:拆分csv其中欄位包含逗號
