これは私が以前に尋ねた質問ですが、間違った方法で説明しましたので、もう一度新しい質問を開きます。あなたの助けと時間を感謝してください!パンダの横列
データ入力:
df=pd.DataFrame({'variable':["A","A","B","B","C","D","E","E","E","F","F","G"],'weight':[2,2,0,0,1,3,3,1,5,0,0,4]})
df
Out[447]:
variable weight
0 A 2
1 A 2
2 B 0
3 B 0
4 C 1
5 D 3
6 E 3
7 E 1# If value more than 2 , out put should be 0
8 E 5
9 F 0
10 F 0
11 G 4
予想される出力:
df
Out[449]:
variable weight NEW
0 A 2 1
1 A 2 1
2 B 0 1
3 B 0 1
4 C 1 1
5 D 3 ERROR
6 E 3 ERROR
7 E 1 1
8 E 5 1
9 F 0 1
10 F 0 1
11 G 4 ERROR
今のように私のアプローチ(醜い...):ここ
l1=[]
for i in df.variable.unique():
temp=df.loc[df.variable==i]
l2 = []
for j in range(len(temp)):
print(i,j)
if temp.iloc[j,1]<=2 :
l2.append(1)
elif temp.iloc[j,1]>2 and j==0:
l2.append('ERROR')
elif temp.iloc[j,1]>2 and j > 0 :
if l2[j - 1] == 1:
l2.append(1)
else:
l2.append(0)
print(l2)
l1.extend(l2)
df['NEW']=l1
私の質問:
第1。 groupby
を使用する場合は、ここでNEW
列を取得するために、計算結果を将来の計算に含めるにはどうすればよいですか。
第2。 .Last.value
のようなpandas
の機能はR
にありますか?
私はここに状態を説明します
:2未満重量の値1.If
は常に2よりも高い重量の最初の値2.Ifは1
である必要があり、それはする必要があります「エラー」と重み値現在の行を取得し、前の3.IfはERROR
を返すことは、それが0
そして親切CHを返します2以上のものですANGE入力に:
df=pd.DataFrame({'variable':["A","A","B","B","C","D","E","E","E","F","F","G"],'weight':[2,2,0,0,1,3,3,9,5,0,0,4]})
あなたが「ERROR」の背後にあるロジックを説明いただけませんようにこれが見えます値? – MaxU
@MaxU各グループの最初の値は 'ERROR'または' 1'のいずれかになります – Wen
'ERROR'、' 1'と '0'のときはまだ理解できません... – MaxU