【问题标题】:Creating new columns with pandas .loc使用 pandas .loc 创建新列
【发布时间】:2020-01-29 02:20:40
【问题描述】:

我的数据集如下所示:

ex = pd.DataFrame.from_dict({'grp1': np.random.choice('A B'.split(), 20), 'grp2': np.random.choice([1, 2], 20), 'var1': np.random.rand(20), 'var2': np.random.randint(20)})

我想在组中创建具有下一个值的新列,但以下代码导致SettingWithCopyWarning

ex[['next_var1', 'next_var2']] = ex.groupby(['grp1', 'grp2'])[['var1', 'var2']].shift(-1)

因此我尝试使用.loc

ex.loc[:, ['next_var1', 'next_var2']] = ex.groupby(['grp1', 'grp2'])[['var1', 'var2']].shift(-1)

但是,它会导致错误:

KeyError:“[列] 中没有 [Index(['next_var1', 'next_var2'], dtype='object')]”

.loc 的用法有什么问题?

【问题讨论】:

  • 我在 Python 3.7.5 中没有收到ex[['next_var1', 'next_var2']] = ex.groupby(['grp1', 'grp2'])[['var1', 'var2']].shift(-1) 的警告

标签: pandas


【解决方案1】:

使用loc,您无法创建新列。但你可以这样做:

ex['next_var1'], ex['next_var2'] = None, None

ex.loc[:, ['next_var1', 'next_var2']] = ex.groupby(['grp1', 'grp2'])[['var1', 'var2']].shift(-1).values

不过你也可以这样做:

ex[['next_var1', 'next_var2']] = ex.groupby(['grp1', 'grp2'])[['var1', 'var2']].shift(-1)

这是您尝试过的,但它适用于 python 3.7 和 pandas 0.25

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2016-04-02
    • 2019-02-17
    • 2018-02-24
    • 2021-05-20
    相关资源
    最近更新 更多