我有5列包含[电压,总线,负载,负载值,传输,传输值]。所有带有“值”的列名均包含基于其对应值的数值。csv文件如下所示
Voltage Bus Load load_Values transmission transmission_Values
Voltage(1) 2 load(1) 3 transmission(1) 2
Voltage(2) 2 load(2) 4 transmission(2) 3
Voltage(5) 3 load(3) 5 transmission(3) 5
我必须根据传输和负载获取总线的值。例如 获得公共汽车的价值。首先,我需要获取transmission(2)的值3。现在,基于此值,我需要获取load的值load(3)= 5。接下来,基于此值,我必须得出Voltage(5)的值为3。
我尝试根据相应列的值获取单列的值。
total=df[df['load']=='load(1)']['load_Values']
next_total= df[df['transmission']=='transmission['total']']['transmission_Values']
v_total= df[df['Voltage']=='Voltage(5)']['Voltage_Values']
如何自动获取所有这些值。例如,如果我在每列中都有1100个值,那么如何在这些列中获取1100个的所有值。
This is how dataset looks like 因此,要获得新列的VRES_LD的值。为此,我必须查找具有值I__ND_LD(1)的I__ND_LD列,并将相应的值存储在I__ND_LD_Values中,该值是10。一旦基于该值获得10,我便要查找具有I__BS__ND(10)的I__BS_ND列在I__BS_ND_Values中,其值为5.0。基于此值,我必须找到V_BS(5)的值为0.986009。现在,该值应存储在新列VRES_LD中。如果您现在知道,请告诉我。
答案 0 :(得分:0)
如果我理解正确,那么您应该能够创建键/值表并使用merge
。到voltage
的步骤尚不明确,但我认为以下基本思路应该可行:
df = pd.DataFrame({'voltage': {0: 'Voltage(1)', 1: 'Voltage(2)', 2: 'Voltage(5)'},
'bus': {0: 2, 1: 2, 2: 3},
'load': {0: 'load(1)', 1: 'load(2)', 2: 'load(3)'},
'load_values': {0: 3, 1: 4, 2: 5},
'transmission': {0: 'transmission(1)',
1: 'transmission(2)',
2: 'transmission(3)'},
'transmission_values': {0: 2, 1: 3, 2: 5}})
load = df[['load', 'load_values']].copy()
trans = df[['transmission','transmission_values']].copy()
load['load'] = load['load'].str.extract('(\d)').astype(int)
trans['transmission'] = trans['transmission'].str.extract('(\d)').astype(int)
(df[['bus']].merge(trans, how='left', left_on='bus', right_on='transmission')
.merge(load, how='left', left_on='transmission_values', right_on='load'))
导致:
bus transmission transmission_values load load_values
0 2 2 3 3.0 5.0
1 2 2 3 3.0 5.0
2 3 3 5 NaN NaN
答案 1 :(得分:0)
我认为您需要做三件事。
1。您需要在字符串中输入数字。您是这样做的:
n_cookies = 3
f"I want {n_cookies} cookies"
#Output
I want 3 cookies
2。假设您从传输中获得的值是:
transmission_values = [2,5,20]
您不需要获取这些负载值:
load_values_to_fetch = [f"transmission({n})" for n in transmission_values]
#output
[transmission(2),transmission(5),transmission(20)]
3。最后从df获取负载值。使用.isin()方法:
load_values= df[df['Load'].isin(load_values_to_fetch )]['load_Values'].values
4。应用相同的方法获取电压
我希望我正确理解了这个问题。尝试让我们知道,因为没有数据我无法尝试代码
答案 2 :(得分:0)
我对您的解决方案进行了概括,以便您可以使用任意多个值。
为避免混淆,我将名称从“ Load_Value”更改为“ load_value_name”,因为存在一个小写的名为“ load_value”的变量。
您可以根据需要选择任意多个值。在我们的示例中,我们以“ 1”开头:
string1 = 'SEQ'
seq_letters = 'ATCGRYMKSWHBVDN'
result = []
for i in string1:
if i not in seq_letters:
result.append(i)
print(result)
然后我们获取所有值:
start_values = [1]
load_value_name = [f"^I__ND_LD({n})" for n in start_values]
#Output: but you'll have more than one if needed
['^I__ND_LD(1)']
让我们获取公交车名称:
load_values=df[df['I__ND_LD'].isin(load_names)]['I__ND_LD_Values'].values.astype(np.int)
#output: again, more if needed
array([10])
最后是电压:
bus_names = [f"^I__BS_ND({n})" for n in load_values]
bus_values = df[df['I__BS_ND'].isin(bus_names)]['I__BS_ND_Values'].values.astype(np.int)
#output
array([5])
注意: 我没有四舍五入,而是将其转换为整数。和.isin()方法将查找所有出现的事件,以便您可以获取所有值。