【问题标题】:Pandas: Setting values in GroupBy doesn't affect original DataFramePandas:在 GroupBy 中设置值不会影响原始 DataFrame
【发布时间】:2018-04-19 15:17:38
【问题描述】:
data = pd.read_csv("file.csv")
As = data.groupby('A')
for name, group in As:
    current_column = group.iloc[:, i]
    current_column.iloc[0] = np.NAN

问题:即使我尝试将值设置为 np.NAN,“数据”在此循环之后仍保持不变。

【问题讨论】:

  • 你想做什么?不,这不起作用,因为 groupby 会生成数据的副本。
  • 按某列对数据进行分组(假设以不同方式看待每个国家/地区),而不是以不同方式编辑每个国家/地区的数据。
  • 您的“编辑”的性质是什么?
  • 好的,定义一些函数f,清理f中的数据,然后将f传递给groupby.apply
  • def f(x): ... ; return y # x and y are dataframes

标签: python pandas dataframe set pandas-groupby


【解决方案1】:

.groupby() 不会更改初始 DataFrame。您可能希望将您对 groupby() 所做的操作存储在不同的变量上,并使用该 for 循环将其累积到不同的 DataFrame 中?

【讨论】:

  • 这个我也试过了,在上面的代码之后,我也做了:united_group = pd.DataFrame(for name, group in As: united_group = united_group.append(group)
  • 为什么不创建不同的系列,然后您可以使用 concat() 进行合并? s1 = pd.Series([1, 2], index=['A', 'B'], name='s1') s2 = pd.Series([3, 4], index=['A', 'B'], name='s2') pd.concat([s1, s2], axis=1)
【解决方案2】:

正如@ohduran 建议的那样:

data = pd.read_csv("file.csv")
As = data.groupby('A')
new_data = pd.DataFrame()
for name, group in As:
    # edit grouped data
    # eg group.loc[:,'column'] = np.nan
    new_data = new_data.append(group)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2016-07-16
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多