保留上一个单元格的值,然后复制到下一个单元格python pandas dataframe

保留上一个单元格的值,然后复制到下一个单元格python pandas dataframe

如果数据的类别为B,并且下一行也包含类别B,则应将第一个单元格的值复制到下一个单元格。该公式仅适用于类别B。

此处“值”列显示原始值,“期望”列显示期望的值。我尝试使用shift命令,但在保留值时却没有用。

我的数据库很大,只是示例而已。

''' 代码尝试过'''

df['expected'] = df.groupby('category')['value'].transform('first')

上面的代码将在类别B的所有位置复制值20。

xf_520 回答:保留上一个单元格的值,然后复制到下一个单元格python pandas dataframe

将每个连续的B分成groupID s和groupby sCategory

s = df.Category.ne('B').cumsum()
df['New_val'] = df.groupby(['Category',s])['Value'].transform('first')

Out[23]:
   Time Category  Value  New_val
0  9:00        A     50       50
1  9:01        A     50       50
2  9:02        B     20       20
3  9:03        B     30       20
4  9:04        C     40       40
5  9:05        B     25       25
6  9:06        B     30       25
7  9:07        B     35       25
8  9:08        D     50       50
,

这是一个numpy方法:

df = pd.DataFrame({"Category":list("AABBCBBBD"),"Data":[50,50,20,30,40,25,35,50]})                     
# create result column
df["Modified"] = df["Data"]
# get underlying numpy array
data = df["Modified"].to_numpy()
# get mask of B positions
B = df["Category"].to_numpy()=="B"
# find on and off indices
dB,= np.where(np.diff(B,prepend=False,append=False))
# repeat the first element of each block len(block) times and fill them
# in according to the mask
data[B] = data[dB[::2]].repeat(dB[1::2]-dB[::2])

# admire
df
#  Category  Data  Modified
# 0        A    50        50
# 1        A    50        50
# 2        B    20        20
# 3        B    30        20
# 4        C    40        40
# 5        B    25        25
# 6        B    30        25
# 7        B    35        25
# 8        D    50        50
本文链接:https://www.f2er.com/3169863.html

大家都在问