根据其他列中描述的范围填充数据框列
Filling dataframe columns based on ranges described in other columns
我这里有一个非常有趣的问题,我有一个数据集,
id, start, end
1234 200 400
1235 300 500
1236 100 900
1236 200 1200
1236 300 1400
Main Objective : 我想统计每个id的并发会话数
at 100, id:1236 has 1 session running
at 200, id:1236 has 2 sessions
at 300, id:1236 has 3 sessions
...
at 1000m id:1236 has 2 sessions
etc
我的解决方案:
- 将 1 到 1400(会话的最小值和最大值)的列添加到所有行
- 用 1 填充会话开始值和会话结束值之间的列
- 然后将用户so的所有行相加得到上面的结果。
在pandas中:
df = pd.read_csv(data+fileName,sep="\t",usecols=[0,1,2],names=['id','start','end'])
for i in range(0,1440):
df[str(i)]=0
print df.columns
我可以添加列,并且正在考虑如何在每行的会话开始和结束之间向这些列填充 1。每行可以有不同的会话开始和结束。
任何提示都会有很大帮助。我只是在 pandas 中尝试它,但后来 我必须将它移植到 Apache pyspark,那里在工作节点 .
中没有 pandas
在 Pandas 你也可以这样做:
df[(df.start <= t)&(df.end >= t)].groupby("id").count()['start'].reset_index()
其中 t 是您想要的时间。只需相应地重命名最后一列。但我不知道这是否可以移植到 pyspark 上。@Khris
我这里有一个非常有趣的问题,我有一个数据集,
id, start, end
1234 200 400
1235 300 500
1236 100 900
1236 200 1200
1236 300 1400
Main Objective : 我想统计每个id的并发会话数
at 100, id:1236 has 1 session running
at 200, id:1236 has 2 sessions
at 300, id:1236 has 3 sessions
...
at 1000m id:1236 has 2 sessions
etc
我的解决方案:
- 将 1 到 1400(会话的最小值和最大值)的列添加到所有行
- 用 1 填充会话开始值和会话结束值之间的列
- 然后将用户so的所有行相加得到上面的结果。
在pandas中:
df = pd.read_csv(data+fileName,sep="\t",usecols=[0,1,2],names=['id','start','end'])
for i in range(0,1440):
df[str(i)]=0
print df.columns
我可以添加列,并且正在考虑如何在每行的会话开始和结束之间向这些列填充 1。每行可以有不同的会话开始和结束。
任何提示都会有很大帮助。我只是在 pandas 中尝试它,但后来 我必须将它移植到 Apache pyspark,那里在工作节点 .
中没有 pandas在 Pandas 你也可以这样做:
df[(df.start <= t)&(df.end >= t)].groupby("id").count()['start'].reset_index()
其中 t 是您想要的时间。只需相应地重命名最后一列。但我不知道这是否可以移植到 pyspark 上。@Khris