【问题标题】:How to update original array with groupby in python如何在python中使用groupby更新原始数组
【发布时间】:2021-12-16 16:04:28
【问题描述】:

我有一个数据集,我正在尝试迭代每个组,并且基于每个组,我正在尝试更新原始组:

import pandas as pd
import numpy as np

arr = np.array([1, 2, 4, 7, 11, 16, 22, 29, 37, 46])
df = pd.DataFrame({'grain': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B']})
df["target"] = arr

for group_name, b in df.groupby("grain"):
    if group_name == "A":
        // do some processing
    if group_name == "B":
        // do another processing

我希望看到原始的df 被更新。有什么办法吗?

【问题讨论】:

  • groupby 上的迭代器给出for group_name, grouped_df in df.groupby('grain'): 你应该检查group_name == 'A'/group_name == 'B'
  • 我尝试更改 grouped_df 但它不会更改原始数据 df。我需要更改 df。
  • 你能提供你想要的输出吗?不清楚为什么需要迭代。
  • 是的,这是真的。它与原始 DataFrame 未连接。 df.loc[grouped_df.index, 'col'] = whatever 怎么样?
  • Idk,我觉得它有点不安全。我会创建任何新数据,然后分配回去。

标签: python pandas dataframe group-by


【解决方案1】:

这里有一种改变原始数据的方法,这个例子需要一个不重复的索引。与使用经典的 pandas 操作相比,我不确定这种方法有什么好处。

import pandas as pd
import numpy as np
arr = np.array([1, 2, 4, 7, 11, 16, 22, 29, 37, 46])
df = pd.DataFrame({'grain': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B']})
df["target"] = arr
for g_name, g_df in df.groupby("grain"):
    if g_name == "A":
        df.loc[g_df.index, 'target'] *= 10
    if g_name == "B":
        df.loc[g_df.index, 'target'] *= -1

输出:

>>> df
  grain  target
0     A      10
1     B      -2
2     A      40
3     B      -7
4     A     110
5     B     -16
6     A     220
7     B     -29
8     A     370
9     B     -46

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多