如何逐片修改pandas Dataframe ?

swvgeqrz  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(111)

基本上,我想一次处理一个pandas Dataframe 的一个切片,我希望对该切片的更改反映在原始 Dataframe 中。作为一个例子,在下面的代码中,我取df的一个切片,即sub_df,然后取sub_sub_df的一个切片。现在我想对sub_sub_df进行更改,并希望这些更改反映到df中。

df = pd.DataFrame()
df['a'] = np.random.choice([0,1,2,3,4,5], size=100)
df['b'] = np.random.choice([-1,+1], size=100)
df['out'] = np.zeros(shape=(100,))

for i in [0,3,4]:
    sub_df = df[df.a == i]
    for j in [-1,+1]:
        sub_sub_df = sub_df[sub_df.b == j]
        sub_sub_df.out = np.random.normal()
df.head()

这表明df的'c'列仍然是零,我对sub_sub_df所做的更改没有传播回来。

w41d8nur

w41d8nur1#

下面更新的代码应该工作我猜

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['a'] = np.random.choice([0,1,2,3,4,5], size=100)
df['b'] = np.random.choice([-1,+1], size=100)
df['out'] = np.zeros(shape=(100,))

for i in [0,3,4]:
    sub_df = df[df.a == i]
    for j in [-1,+1]:
        sub_sub_df = sub_df[sub_df.b == j]
        index_ = sub_sub_df.index
        df.loc[index_, 'out'] = np.random.normal()
df.head()
lmvvr0a8

lmvvr0a82#

下面是一种在每一步跟踪最小索引的方法:

for i in [0,3,4]:
    sub_idx = df.index[df.a == i]
    for j in [-1,+1]:
        sub_sub_idx = sub_idx[df.loc[sub_idx, 'b'] == j]
        df.loc[sub_sub_idx, 'out'] = np.random.normal()

相关问题