【问题标题】:Data Manipulation - shifting rows manipulation数据操作 - 移动行操作
【发布时间】:2020-03-03 14:19:41
【问题描述】:

我有一个 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


【解决方案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

【讨论】:

    【解决方案2】:

    只要剪掉这个块,添加第一列,然后将它们连接起来

    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) 无效。为什么?

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 2018-07-05
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2019-08-12
      • 2021-03-11
      相关资源
      最近更新 更多