Pandas Dataframe Python:代码错误修复和简化-如果位置=';Y';
输入说明:具有数据帧Pandas Dataframe Python:代码错误修复和简化-如果位置=';Y';,python,pandas,numpy,dataframe,debugging,Python,Pandas,Numpy,Dataframe,Debugging,输入说明:具有数据帧df,列如下所述: Store Category Space Location 11 AA 2.0 Y 11 BB 1.5 Y 11 CC 3.0 N 12 AA 4.2 Y 得到了一个变量“位置百分比=0.5”(50%) 场景:对于每个门店,位置值为“Y”的每个类别的空格列值必须除以给定的“位置百分比”。如果特定门店
df
,列如下所述:
Store Category Space Location
11 AA 2.0 Y
11 BB 1.5 Y
11 CC 3.0 N
12 AA 4.2 Y
得到了一个变量“位置百分比=0.5”(50%)
场景:对于每个门店,位置值为“Y”的每个类别的空格列值必须除以给定的“位置百分比”。如果特定门店类别的空间值减少,则添加一列“减少”
预期输出:
Store Category Space Location Reduced
11 AA 1.0 Y Y
11 BB 0.75 Y Y
11 CC 3.0 N N
12 AA 2.1 Y Y
已尝试代码:这无法按预期工作。此外,需要简化场景的方法,而不需要太多for/if循环
loc_perc = 0.5
Store = 'Store'
Category = 'Category'
Location = 'Location'
Space = 'Space'
for i in dfOutput[Store].unique().tolist():
dfNew = dfOutput[dfOutput[Store] == i].copy()
dual_flows = dfNew[Category][dfNew[Location] == 'Y'].unique()
for flow in dual_flows.tolist():
if flow in dfNew[Category].values:
original_space = dfNew[Space][dfNew[Category] == flow]
reduced_space = original_space * loc_perc
dfNew[Space] = reduced_space
您可以创建一个临时列来保存空间的当前值,根据
位置
和空间
计算新值,最后创建一个新列减少
,如果空间
中的值确实减少了
您可以将numpywhere
视为if-else语句
loc_perc = 0.5
df.assign(
temp=lambda x: x.Space,
Space=lambda x: np.where(x.Location == "Y", x.Space * loc_perc, x.Space),
Reduced=lambda x: np.where(x.Space < x.temp, "Y", "N"),
).drop("temp", 1)
Store Category Space Location Reduced
0 11 AA 1.00 Y Y
1 11 BB 0.75 Y Y
2 11 CC 3.00 N N
3 12 AA 2.10 Y Y
loc_perc=0.5
分配(
温度=λx:x.空间,
空间=λx:np.式中(x.Location==“Y”,x.Space*loc_perc,x.Space),
约化=λx:np.式中(x.空间
您可以创建一个临时列来保存空间的当前值,根据位置
和空间
计算新值,最后创建一个新列减少
,如果空间
中的值确实减少了
您可以将numpywhere
视为if-else语句
loc_perc = 0.5
df.assign(
temp=lambda x: x.Space,
Space=lambda x: np.where(x.Location == "Y", x.Space * loc_perc, x.Space),
Reduced=lambda x: np.where(x.Space < x.temp, "Y", "N"),
).drop("temp", 1)
Store Category Space Location Reduced
0 11 AA 1.00 Y Y
1 11 BB 0.75 Y Y
2 11 CC 3.00 N N
3 12 AA 2.10 Y Y
loc_perc=0.5
分配(
温度=λx:x.空间,
空间=λx:np.式中(x.Location==“Y”,x.Space*loc_perc,x.Space),
约化=λx:np.式中(x.空间
酷!这工作完美而简单。感谢您的时间和帮助@sammywemmyCool!这工作完美而简单。谢谢你的时间和帮助@sammywemmy