我有一个数据框,其中包含一堆数字,范围从 1 到 100。我想拆分这些值,以便如果值介于 1 到 10 之间,则将它们替换为 0。如果值介于 11 到 20 之间,它们被替换为 1。如果值介于 21 - 30 之间,则它们被替换为 2,依此类推。我怎样才能用 Pandas 做到这一点?我试过的:dating["attr1_1"] = dating["attr1_1"][0:11] = 0
dating["attr1_1"] = dating["attr1_1"][11:21] = 1
3 回答

守候你守候我
TA贡献1802条经验 获得超10个赞
您可以使用 binning 过程pd.cut()
。
import pandas as pd a = pd.Series(range(1,100)) pd.cut(a, bins=[1,11,21,31,41,51,61,71,81,91,101], labels=False, right=False)

小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
您可以像这样在所有列上应用:
df.apply(lambda x: x-1 // 10)
这是调用底数除法:2.9 变为 2,1.8 变为 1 等。由于在您的情况下 30 应变为 2,因此我们在应用底数除法之前从值中减去 1。

白板的微信
TA贡献1883条经验 获得超3个赞
您可以创建一个函数来执行操作并将其作为 .apply() 的参数传递。例如:
def function_name(rows):
if row > 0 and row <= 10:
return 0
elif othercases ...
for cols in df.columns: # loop over all columns in your dataframe
df[cols] = df[cols].apply(function_name)
添加回答
举报
0/150
提交
取消