【问题标题】:Need help on Pandas Dataframe creation by passing a dynamic argument list to a function通过将动态参数列表传递给函数来创建 Pandas Dataframe 需要帮助
【发布时间】:2020-06-08 18:32:12
【问题描述】:

我有一个如下所示的表 T1(存储为数据框 df3,列 col1、col2 和 col3)

df2 有列 'l'、'm'、'n'...

df1 有 'a'、'b'、'c' 列

col1 col2 col3

x 添加 {'a':'df1','l':'df2','n':'df2'}

y sub {'b':'df1','m':'df2'}

z sqrt {'c': 'df1'}

col1 中的值 x 将使用 col2 中的操作 add 使用 col3 中的参数 key:value 对(a df1 中,ldf2 中,...)

同样,col1 中的值 y 将使用 col2 中的操作 sub 使用 col3 中的参数计算(b in df1 , m in df2); Col3 中 k:v 对的数量可能更多或更少,具体取决于 col 2 中定义的操作/功能,例如,对于 sqrt,只有 1 对

我想以如下所述的数据帧 df4 的形式获得输出

xyz df1['a']+df2['l']+df2['n'] df1['b'] - df2['m'] df1['c]

我正在尝试通过构建如下所述的函数来实现这一点,但我不确定如何构建动态参数列表并将其传递给该函数,其中要传递的参数数量取决于 k 的数量:在 col3 中分配了 v 对?对于 add 我有 3 个,对于 sub 我有 2 个,对于 sqrt 我只有 1 个

for ix,row in df3.iterrows():

call_operation = row['col2'] target_value = row['col1'] #df4[target_value] = getattr(module,call_operation)(df2[b],df1[a]) df4[target_value] = getattr(module,call_operation)( <dynamic argument list form col3> )

【问题讨论】:

    标签: python pandas function dataframe dynamic


    【解决方案1】:
    # dummy data
    df1 = pd.DataFrame({'a': [1, 2, 3]})
    df2 = pd.DataFrame({'l': [4, 5, 6],
                        'n': [7, 8, 9]})
    
    # get your dfs in a list so we can call them by name
    dfs = {'df1': df1, 'df2': df2}
    
    # let's say you are in your for loop on the first row:
    ix = 0
    target_name = 'x'
    call_operation = 'sum'
    col3 = {'a': 'df1', 'l': 'df2', 'n': 'df2'}
    
    # actual logic:
    vars = []
    for k, v in col3.items():
        vars.append(dfs[v][k].iloc[ix])
    results['target_name'].iloc[ix] = getattr(__builtin__, call_operation)(vars)
    

    根据您在真实数据中的操作类型,您可以使用getattr()if 语句或两者的组合。

    if call_operation == 'sqrt':
        getattr(math, 'sqrt')(vars[0])
    

    等等

    虽然这感觉不像是正确使用 pandas,但我不确定您的实际数据集的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2021-03-29
      相关资源
      最近更新 更多