簡體   English   中英

如何根據另一列的特定值對 python dataframe 進行操作?

[英]How to make operations on python dataframe based on specific values of another column?

我是 python 數據分析的新手。 以下是一個示例數據集:

d2 = {'Index': [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1], 'journey_time':[95.546,132.945,147.538,301.307,42.907,129.008,102.900,112.620,234.334,103.321,82.337,154.817,20.076,85.717,94.362,45.032],'edge':['s_b','c_d','b_d','c_e','d_f','s_a','a_c','d_c','c_e','a_c','d_c','s_a','d_f','s_b','b_d','c_d']}
df2=pd.DataFrame(data=d2)

我想創建一個新的數據框,其中每個索引都有一行新列。 新列的規則如下:

se1 = s_a + a_c + c_e
se2 = s_b + b_d + d_c + c_e
sf1 = s_b + b_d + d_f
sf2 = s_a + a_c + c_d + d_f 

此外,我的計算還有進一步的變化,例如

eq_time1 = (200/(s_a + a_c)) + c_e
eq_time2 = (200/(s_b + b_d + d_c)) + c_e 

規則中邊的值是每個唯一索引對應的旅程時間。 我不知道如何在 python dataframe 中寫這個。 以下是我預期的 output:

df3 = {'Index':[0,1],'se1':[129.008+102.900+301.307,154.817+103.321+234.334],'se2':[95.546+147.538+112.620+301.307,85.717+94.362+82.337+234.334],'sf1':[95.546+147.538+42.907,85.717+94.362+20.076],'sf2':[129.008+102.900+132.945+42.907,154.817+103.321+45.032+20.076 ],'eq_time1':[(200/(129.008+102.900))+301.307,(200/(154.817+103.321))+234.334   ], 'eq_time2' : [(200/(95.546+147.538+112.620))+301.307,(200/(85.717+94.362+82.337))+234.334]}

請幫忙!

如果您的數據中只有這 4 條路徑,則可以按如下方式計算 pandas 中的時間:

paths = {
  'se1': ['s_a', 'a_c', 'c_e'],
  'se2': ['s_b', 'b_d', 'd_c', 'c_e'],
  'sf1': ['s_b', 'b_d', 'd_f'],
  'sf2': ['s_a', 'a_c', 'c_d', 'd_f']
}

paths = {
  'se1': ['s_a', 'a_c', 'c_e'],
  'se2': ['s_b', 'b_d', 'd_c', 'c_e'],
  'sf1': ['s_b', 'b_d', 'd_f'],
  'sf2': ['s_a', 'a_c', 'c_d', 'd_f']
}

df3 = pd.DataFrame({'Index': df2['Index'].unique()}).set_index('Index')

for k, v in paths.items():
  df3[k] = df2[df2.edge.isin(v)].groupby('Index')['journey_time'].sum()
  last_edge_times = df2[df2.edge==v[-1]].set_index('Index')
  df3['eq_time_'+k] = 200.0/(df3[k] - last_edge_times.journey_time) + last_edge_times.journey_time

對於任何路徑peq_time_p列存儲方程給出的 eq_times。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM