0

我有一个 Pandas DataFrame,我想循环column 1,如果列值是vergleich我将行单元格向右移动一次。

这是我的尝试:

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

当我打印 df 时,我没有看到任何变化。请告知如何解决这个问题

4

2 回答 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
于 2020-03-03T14:26:11.900 回答
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)无效。为什么?

于 2020-03-03T14:35:02.780 回答