Python 数据操作:使用一些预定值映射列
我的数据是这样的Python 数据操作:使用一些预定值映射列,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据是这样的 import pandas as pd import numpy as np T1_Delivery = 20 T2_Delivery = 30 T3_Delivery = 40 T4_Delivery = 55 data = [ {'Person': 'A', 'Present_Delivery': -10, 'update': 'T1'}, {'Person': 'B', 'Present_Delivery': 30}, {'Person': '
import pandas as pd
import numpy as np
T1_Delivery = 20
T2_Delivery = 30
T3_Delivery = 40
T4_Delivery = 55
data = [
{'Person': 'A', 'Present_Delivery': -10, 'update': 'T1'},
{'Person': 'B', 'Present_Delivery': 30},
{'Person': 'C', 'Present_Delivery': 40},
{'Person': 'D', 'Present_Delivery': 70, 'update': 'T3'},
{'Person': 'E', 'Present_Delivery': 50, 'update': 'T2'},
{'Person': 'F', 'Present_Delivery': 50}
]
df = pd.DataFrame(data)
df['Actual_Delivery'] = np.where(df['update']==np.NaN, df['Present_Delivery'],0)
#map T{x} to T{x}_Delivery
我需要将更新条目(x)映射到全局定义的T{x}\u交付。这可能吗?如果全球定义中不存在交付,我可以绘制地图
我的输出是这样的:
data = [
{'Person': 'A', 'Actual_Delivery': 20},
{'Person': 'B', 'Actual_Delivery': 30},
{'Person': 'C', 'Actual_Delivery': 40},
{'Person': 'D', 'Actual_Delivery': 40},
{'Person': 'E', 'Actual_Delivery': 30},
{'Person': 'F', 'Actual_Delivery': 50}
]
df_desired = pd.DataFrame(data)
编辑:这是较大脚本的一部分,无法将全局变量更改为字典 您可以为映射构建字典。然后使用和 另一个想法是使用
您是否考虑过使用字典,而不是为每个
TX
使用一组全局变量?这将使数据框中的值与它们各自的条目之间的关系更加直接。是的,我已经考虑过了。但这是不可能的,因为目前的代码。(在一小段更大的代码中显示的)可能会考虑进一步重构代码,使事情变得简单。这基本上使这个问题毫无意义。有人提到,如果变量名相同,我可以使用映射。您正在更改全局变量名,这在脚本中的较大方案中是不允许的!!!
mapping = {'T1':20,'T2':30,'T3':40,'T4':55}
df_final = (df[['Person', 'Present_Delivery']].
assign(Present_Delivery = df['update'].map(mapping).fillna(df['Present_Delivery']))
)
Person Present_Delivery
0 A 20.0
1 B 30.0
2 C 40.0
3 D 40.0
4 E 30.0
5 F 50.0
df['Present_Delivery'] = (df['Present_Delivery'].where(
df['update'].isna(),df['update'].map(mapping))
)
df_final = df.drop(columns='update')
Person Present_Delivery
0 A 20
1 B 30
2 C 40
3 D 40
4 E 30
5 F 50