任何人都可以向我解释如何解决此问题。
假设我有一个像这样的数据框:
Df = {'toto': ["A", "B", "C", "D"],
'titi': ["g", "t", "x", "z"],
'Energy': [180, 345, 234, 654],
'T10sec': [0.1, 0.4, 0.5, 1],
'T50sec': [5.3, 5.7, 8, 2]}
为此Df
我创建了一个函数
def record(letter1, letter2, Energy_value, time):
我想做的是
检查是否:输入值位于此Df
中,如果为yes
,则
Results = Df.thecorrespondingtime[i]
假设对于列'toto'
和'titi'
,输入字母位于Df
中,可能出现两种情况:
案例1:输入'Energy_value'
在Df
中,但不在'time'
值中,那么我必须找到该值的范围并创建其列并用插值填充。
情况2:'time'
的列值存在,但输入的能量值no。再次在这里,我需要进行插值。
我的限制是:
如何检查'time'
列是否存在以及如何将其置于两个现有值之间。
输入能量值的问题相同。
在这里,我尝试了什么:
def record(letter1, letter2, Energy_value, time='T15sec'):
For i in range(len(Df)):
If ((df.toto[i] == letter1) and
(df.titi[i] == letter2) and
(df.Energy[i] == Energy_value) and
(time in df)):
但是它不起作用。 谁能帮我吗?
答案 0 :(得分:0)
如果问题基本上是关于在数据帧中插入另一个时间列,那么这将是一个解决方案:
import pandas as np
df = pd.DataFrame({'toto': ["A", "B", "C", "D"],
'titi': ["g", "t", "x", "z"],
'Energy': [180, 345, 234, 654],
'T10sec': [0.1, 0.4, 0.5, 1],
'T50sec': [5.3, 5.7, 8, 2]})
df
toto titi Energy T10sec T50sec
0 A g 180 0.1 5.3
1 B t 345 0.4 5.7
2 C x 234 0.5 8.0
3 D z 654 1.0 2.0
添加时间列:
import numpy as np
time = 'T15sec'
if not time in df:
df[time] = np.NaN
df.iloc[:, 3:] = df.iloc[:, 3:].T.sort_index().interpolate().T
df[['toto', 'titi', 'Energy', 'T10sec', time, 'T50sec']]
toto titi Energy T10sec T15sec T50sec
0 A g 180 0.1 2.70 5.3
1 B t 345 0.4 3.05 5.7
2 C x 234 0.5 4.25 8.0
3 D z 654 1.0 1.50 2.0