gpt4 book ai didi

Python/Pandas - 如果另一个行值 < 列名则创建行值

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:02 26 4
gpt4 key购买 nike

我有一个可以用这个创建的数据框:

import pandas as pd
import numpy as np

#create df
data={'id':['a','b','c','d'],
'cd':[0,4,1,3],
'ddf':[2,5,2,5],
0:np.nan,
1:np.nan,
2:np.nan,
3:np.nan,
4:np.nan,
5:np.nan,
6:np.nan
}
df=pd.DataFrame.from_dict(data)[['id','cd','ddf',0,1,2,3,4,5,6]]

看起来像这样:

df
Out[35]:
id cd ddf 0 1 2 3 4 5 6
0 a 0 2 NaN NaN NaN NaN NaN NaN NaN
1 b 4 5 NaN NaN NaN NaN NaN NaN NaN
2 c 1 2 NaN NaN NaN NaN NaN NaN NaN
3 d 3 5 NaN NaN NaN NaN NaN NaN NaN

我想做的是计算列 0、1、2、3、4、5、6 和 df['cd'] 的列名之间的差异 --> 如果列名 >= 到 df['cd']并且列名是 <= to df['ddf'] 。生成的 df 应如下所示:

df
Out[45]:
id cd ddf 0 1 2 3 4 5 6
0 a 0 2 0.0 1.0 2.0 NaN NaN NaN NaN
1 b 4 5 NaN NaN NaN NaN 0.0 1.0 NaN
2 c 1 2 NaN 0.0 1.0 NaN NaN NaN NaN
3 d 3 5 NaN NaN NaN 0.0 1.0 2.0 NaN

我已经使用以下方法成功填充了 IF 子句的第一部分:

df.loc[:,j]=(j-i[:,None])

哪里:

i=df.cd.values
j=[0,1,2,3,4,5,6]

但是在执行“column name is <= to df['ddf']”部分时遇到问题。理想情况下,我们可以一起做。速度将非常重要,因为完整的数据帧非常大,行数 >100m,j 的长度约为 4,000。

最佳答案

这是使用numpy广播的一种方式

s1=df.cd.values
s2=df.ddf.values
s=df.columns[3:].values
t=(s1[:,None]-s<=0)&(s2[:,None]-s>=0)
updf=pd.DataFrame(t.cumsum(axis=1),columns=s,index=df.index)
df.update((updf-1).where(t))
df
Out[590]:
id cd ddf 0 1 2 3 4 5 6
0 a 0 2 0.0 1.0 2.0 NaN NaN NaN NaN
1 b 4 5 NaN NaN NaN NaN 0.0 1.0 NaN
2 c 1 2 NaN 0.0 1.0 NaN NaN NaN NaN
3 d 3 5 NaN NaN NaN 0.0 1.0 2.0 NaN

关于Python/Pandas - 如果另一个行值 < 列名则创建行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com