Disini saya menulis persamaan penjumlahan untuk mencari nilai Y sesuai dengan file csv saya.

Di sini saya ingin menulis untuk rentang 0 dengan perbedaan waktu. Ketika saya menulis itu memberi saya kesalahan ini, ("'str' object cannot be interpreted as an integer", 'occurred at index 0')

Persamaan penjumlahan saya,

enter image description here

n = selisih waktu antara dua baris

Kode saya:

def y_convert(X,time):
   Y=0
  if x == 10:            
      for k in range(0,time):
         Y=np.sum(X*k)
    else:            
       for k in range(0,time):
       Y=np.sum(X*k)
return Y

Kemudian ubah perbedaan waktu menjadi menit dan kemudian terapkan kode ini untuk menemukan y

df1['time_diff'] = pd.to_datetime(df1["time"])
df1['delta'] = (df1['time_diff']-df1['time_diff'].shift()).fillna(0)
df1['t'] = df1['delta'].apply(lambda x: x  / np.timedelta64(1,'m')).astype('int64') % (24*60)

X = df1['X'].astype(int)
time=df1['t'].astype(int)

Y = df1.apply(lambda x: y_convert(x.X,x.time), axis=1)

Kemudian saya mencoba memplot grafik setelah mendapatkan jawaban yang benar yang diberikan oleh jezrael

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(time, df1['Y'])

ax.set_xlabel
ax.set_ylabel
plt.show()

Grafik plot:

enter image description here

File csv saya:

enter image description here

1
team 8 Agustus 2019, 09:05

1 menjawab

Jawaban Terbaik

Saya pikir Anda perlu melewati kolom t, bukan kolom time:

df1['t'] = df1['delta'].dt.total_seconds().div(60).astype(int)

Y = df1.apply(lambda x: y_convert(x.X,x.t), axis=1)

Alasannya adalah jika menggunakan fungsi range tepat waktu, argumen kedua bukan waktu, tetapi bilangan bulat.

Dalam solusi Anda digunakan:

range(0,'6:15:00')

Tampaknya juga solusi Anda harus banyak menyederhanakan:

Y = df1['X'] * (df1['t'] - 1)
1
jezrael 8 Agustus 2019, 06:33