gpt4 book ai didi

Python:如何遍历行并应用函数来创建新列

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:27 24 4
gpt4 key购买 nike

variable    best m_value  g_value  e_value
m 8 3 3 7
g 5 5 5 9
e 7 6 4 4
m 3 7 8 2
m 6 2 1 1
e 7 6 4 2

这是我实际数据框的微型版本,我想对每行进行计算。对于每一行,我想从以变量值开头的列中减去 best(例如,对于第一行,我想从 m_value 中减去 best,如m 在变量 列中指示)。因此,我有以下函数,它从 variable 中以字符串开头的列中减去 best:

df_test['dif'] = df_test.apply(lambda row: (df_test.loc[row,'best']) - (df_test[df_test.columns[pd.Series(df_test.columns).str.startswith(df_test.loc[row,'variable'])]]), axis=0)

但是我得到以下错误:

(u'None of [0    m\n1    g\n2    e\n3    m\n4    m\n5    e\n6    g\n7    e\nName: variable, dtype: object] are in the [index]', u'occurred at index variable')

如何正确应用函数?

示例数据:

df_test = pd.DataFrame()
df_test['variable']= ['m', 'g', 'e', 'm', 'm', 'e','g', 'e']
df_test['best'] = [8,5,7,3,6,7,8,9]
df_test['m_value']= [3,5,6,7,2,6,6,9]
df_test['g_value']= [3,5,4,8,1,4,7,2]
df_test['e_value']= [7,9,4,2,1,2,3,4]

最佳答案

您不需要按行求助 pd.DataFrame.apply其中计算可以被向量化。相反,您可以使用 Pandas 中可用的优化方法。在这种情况下,通过 pd.DataFrame.lookup :

df_test['dif'] = df_test['best'] - \
df_test.lookup(df_test.index, df_test.variable+'_value')

print(df_test)

variable best m_value g_value e_value lookup
0 m 8 3 3 7 5
1 g 5 5 5 9 0
2 e 7 6 4 4 3
3 m 3 7 8 2 -4
4 m 6 2 1 1 4
5 e 7 6 4 2 5
6 g 8 6 7 3 1
7 e 9 9 2 4 5

关于Python:如何遍历行并应用函数来创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com