数据操作-移位行操作

问题描述 投票:0回答:2

我有一个Pandas DataFrame,我想遍历column 1,如果列值为vergleich,则将行单元格向右移动一次。

这是我的尝试:

for i,j in df.iterrows():
    if j[1]== "stringobject":
        df.shift(periods=1,axis=1)
print(df)

打印df时,看不到任何变化。请告知如何进行此操作

python pandas dataframe data-manipulation shift
2个回答
1
投票

IIUC,请使用此MCVE尝试此操作:

df = pd.DataFrame({'col1':[1,2,3,'A','A'],'col2':['A','A','A','Z','Z'], 'col3':['Z','Z','Z', np.nan, np.nan]})

#col1 col2 col3
#0    1    A    Z
#1    2    A    Z
#2    3    A    Z
#3    A    Z  NaN
#4    A    Z  NaN 

m = df['col1'] == 'A'
df[m] = df[m].shift(1, axis=1)

输出:

  col1 col2 col3
0    1    A    Z
1    2    A    Z
2    3    A    Z
3  NaN    A    Z
4  NaN    A    Z

0
投票

只需切下这一块,添加第一列,然后将它们重新连接起来

verg = df.groupby(1).apply(lambda g: g if g.name != 'vergleigh' else g.T.shift(1).T)

编辑:有点奇怪,但是g.T.shift(1).T有效,而g.shift(1, axis=1)无效。为什么?

© www.soinside.com 2019 - 2024. All rights reserved.