python - 快速从另一个数据帧创建熊猫数据帧
问题描述
我有一个看起来像这样的数据框:
index | in | out | time
7 | 8 | 8 | 232
11 | 3 | 0 | 0
79 | 0 | 8 | 12
我想用这个创建一个DataFrame,其中每个非零in/out
值都设置为1(它们都是正数)。Time
并且index
应该相同:
index | in | out | time
7 | 1 | 1 | 232
11 | 1 | 0 | 0
79 | 0 | 1 | 12
我认为应该有比我这样做更快的方法:
df2 = pd.DataFrame({"index":[], "in":[], "out":[], "time":[]})
for index, row in df.iterrows():
if row["in"] == 0:
in_val = 0
else:
in_val = 1
if row["out"] == 0:
out_val = 0
else:
out_val = 1
time = row["time"]
df2 = df2.append(pd.DataFrame({"index":[index], "in":[in_val], "out":[out_val], "time":[time]}), sort=False)
我可以使用一些 lambda 函数或类似列表理解的东西来更快地转换数据帧吗?
解决方案
numpy.where
与带有列表的列一起使用:
cols = ['in','out']
df[cols] = np.where(df[cols].eq(0), 0, 1)
或将布尔掩码转换为不等于整数:
df[cols] = df[cols].ne(0).astype(int)
如果没有负值,请使用DataFrame.clip
:
df[cols] = df[cols].clip(upper=1)
print (df)
index in out time
0 7 1 1 232
1 11 1 0 0
2 79 0 1 12
推荐阅读
- javascript - Angular Ngfor ,触发点击 nth(x) 项目
- python-3.x - 如何在 whileloop 中让随机生成的数字每次都不同?
- javascript - 使用 MySQL 数据库数据从 for 循环创建数组
- python - 为什么只使用工人?
- c++ - ncurses (init_extended_pair):不能创建超过 255 个颜色对
- ruby - 将数组整数转换为 RGB 值的算法(类似于 excel)
- excel - 删除和添加工作表会弄乱代码
- mongodb - Mongodb 聚合与 mongoose 过滤器嵌入文档
- javascript - 如何将正则表达式转换为动态?
- google-api - 如何上传多个文件上传到谷歌驱动器?