根据其他列向熊猫数据框中添加一列

问题描述

引言:有关代码,请看下面的

假设我们有一个由3列和2行组成的pandas数据框。 我想添加一个名为“ Max_LF”的第四列,该列将包含一个数组。通过查看列“ Max_WD”来检索单元格的值。对于第一行是0.35,它将与“ WD”列中的值进行比较,其中在第三位置可以找到0.35。因此,列“ LF”的第三个值应写入列“ Max_LF”。如果在“ WD”中多次出现“ Max_WD”的值,则应将“ LF”的所有对应项写入“ Max_LF”。

尝试失败

到目前为止,我在第一次检索“ WD”中“ Max_WD”中项目的索引时有各种尝试。在潜在地获取索引之后,想法是通过索引获取“ LF”项: df4['temp_indices'] = [i for i,x in enumerate(df4['WD']) if x == df4['Max_WD']]

但是,发生了ValueError: 引发ValueError('长度必须匹配才能进行比较') ValueError:长度必须匹配才能进行比较

这是示例日期框架的样子

df = pd.DataFrame(data={'LF': [[1,2,3,4],[1,4]],'WD': [[0.28,0.34,0.35,0.18],[0.42,0.45,[0.31,0.21,0.41,0.41]],'Max_WD': [0.35,0.41]})

预期结果应为

df=pd.DataFrame(data={'LF': [[1,0.41],'Max_LF': [[3],[2,3],[3,4]]})

xiaozhi170 回答:根据其他列向熊猫数据框中添加一列

您只需按照以下方式使用lambda即可

df['Max_LF'] = df.apply(lambda x : [i + 1 for i,e in enumerate(x['WD']) if e == x['Max_WD']],axis=1)

输出为

    LF  Max_WD  WD  Max_LF
0   [1,2,3]   0.35    [0.28,0.34,0.35,0.18]    [3]
1   [1,3]   0.45    [0.42,0.45,0.18]    [2,3]
2   [1,3]   0.41    [0.31,0.21,0.41,0.41]    [3,4]
,

谢谢大家!在您的帮助下,我得以解决了我的问题。 像弗朗西斯亲王一样建议我先做

df['temp'] = df.apply(lambda x : [i for i,axis=1)

获取“ LF”中“ WD”值的指标。然后,在第二步中,我可以通过执行以下操作添加实际的列“ Max_LF”

df['LF_Max'] = df.apply(lambda x: [x['LF'][e] for e in (x['temp'])],axis=1)

非常感谢大家!

,

您可以通过applying a function over axis 1来实现。

为此,我建议您首先将WD列表转换为pd.Series(或numpy.ndarray),然后一次比较所有值。

假设您想要一个高于阈值的所有值的列表,则可以使用以下方法:

>>> def get_max_wd(x): 
...     wd = pd.Series(x.WD) 
...     return list(wd[wd >= x.Max_WD])
... 
>>> df.apply(get_max_wd,axis=1)
0          [0.35]
1    [0.45,0.45]
2    [0.41,0.41]
dtype: object

然后可以将apply的结果作为新列分配到数据框中:

df['Max_LF'] = df.apply(get_max_wd,axis=1)

如果您追求的只是最大值(请参见上面的评论),则可以在函数内使用max()方法。

本文链接:https://www.f2er.com/3122614.html

大家都在问