Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据操作:使用一些预定值映射列_Python_Pandas_Dataframe - Fatal编程技术网

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