Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:从列值中减去一个单元格值_Python_Pandas - Fatal编程技术网

Python 熊猫:从列值中减去一个单元格值

Python 熊猫:从列值中减去一个单元格值,python,pandas,Python,Pandas,问这个问题是因为我的新牢房里都是NaN的,我在这里找不到我需要的答案 假设我有以下数据帧(这是较大拼接数据帧的虚拟子集): pd.DataFrame(np.array([['onset', 100], ['NaN', 200], ['NaN', 350], ['NaN', 400]]), columns=['Event', 'Time']) 因此: 我想创建一个具有相对时间戳的列,如: Event Time reltime 0 onset 100 0 1

问这个问题是因为我的新牢房里都是NaN的,我在这里找不到我需要的答案

假设我有以下数据帧(这是较大拼接数据帧的虚拟子集):

pd.DataFrame(np.array([['onset', 100], ['NaN', 200], ['NaN', 350], ['NaN', 400]]), columns=['Event', 'Time'])
因此:

我想创建一个具有相对时间戳的列,如:

      Event  Time  reltime
   0  onset  100   0
   1  NaN    200   100
   2  NaN    350   250
   3  NaN    400   300
我该怎么做呢?我想我应该用
loc
定位起始时间,然后从列中减去该值,如下所示:

onsettime = df.loc[df['Event']=='onset', 'Time']
df['onsetlatency'] = df['Time']-onsettime
有关信息:

[In] print onsettime
[Out] 0    100
Name: Time, dtype: int64
但是,这仅适用于第一行,即使两个值都是int64。(如下所示)


正确的方法是什么?

如果始终存在值
开始
请通过索引查看LCT第一个值:

df['Time'] = df['Time'].astype(int)

onsettime = df.loc[df['Event']=='onset', 'Time'].values[0]
df['onsetlatency'] = df['Time'] - onsettime

print (df)
   Event  Time  onsetlatency
0  onset   100             0
1    NaN   200           100
2    NaN   350           250
3    NaN   400           300
更一般的解决方案-如果值
start
不存在,则获取
0

onsettime = df.loc[df['Event']=='onset', 'Time']
df['onsetlatency'] = df['Time'] - next(iter(onsettime), 0)
试试这个:

onsettime = df.loc[df['Event']=='onset', 'Time']
df['onsetlatency'] = df['Time'].apply(lambda x: float(x) - float(onsettime[0]))

我不知道为什么我们必须转换成
int
。在
pd.Dataframe()
中,我们使用
int
。但是如果不转换它,就会产生
str
错误,你能告诉我吗?@Nihal-这是
Dataframe
构造函数的问题,这里是use
np.array
,所以所有的值都被转换成字符串数组(因为
NaN
string)。@Nihal-通过
print(np.array([['start',100],'NaN',200],'NaN',350],'NaN',400]])检查它。
@Nihal在创建时可以通过使用字典避免这样的问题。例如,这个
df=pd.DataFrame({'Event':['start',NaN',NaN NaN',NaN 200',NaN',NaN',400],'Time':[100,200,350,400]})
不需要转换成
int
类型。@jezrael你能帮我回答这个问题吗
onsettime = df.loc[df['Event']=='onset', 'Time']
df['onsetlatency'] = df['Time'] - next(iter(onsettime), 0)
onsettime = df.loc[df['Event']=='onset', 'Time']
df['onsetlatency'] = df['Time'].apply(lambda x: float(x) - float(onsettime[0]))