gpt4 book ai didi

Python 根据另一列中的 Nan 或 boolean 值在一列中移动值

转载 作者:行者123 更新时间:2023-12-04 13:08:42 25 4
gpt4 key购买 nike

非常感谢您的帮助!很高兴能够访问这样一个伟大的社区 :)已编辑

这两天我正在拼命地解决这个问题,所以我真的希望得到大家的帮助。

我有一个看起来像这样的表:

<表类="s-表"><头>列AB列C 列<正文>这个1达斯2是3是4一个5在里面6未翻译7文本正文8,910,11和和12所以13所以14.15.16

我现在希望当 A 列中没有任何内容时,ColumnB 中的每个翻译都向上移动一行(以便“This”和“Das”在同一行),但在有内容时保持在同一行ColumnA 中的文本(如“文本”和“文本”)。所以我想要达到的结果是:

<表类="s-表"><头>列AB列C 列<正文>这个达斯1是是3一个在里面5未翻译7文本正文8,,9和和12所以所以13..15

到目前为止,我尝试过使用 boolean 值,但没有成功:

df1['bool'] = (df1['ColumnA'].isnull())
if df1['bool']:
df1['ColumnB'].shift(periods=-1)
else:
df1['ColumnB']

也可以使用 np.where:

df1["ColumnB"] = np.where((df1["ColumnA"].isnull()), df1["ColumnB"].shift(periods=-1), df1["ColumnB"])

将 ColumnB 中的翻译向上移动到带有文本的 ColumnA 的下一行将是完美的(这是我最初的尝试,但不幸的是它没有成功)。非常感谢您迄今为止的帮助和努力!

最佳答案

您正在使用 ColumnA 作为逻辑语句的主题。有一种更简单的方法:

  1. 如果 ColumnB 为空,则使用它下面的行。如果不是,则保留其原始值。
  2. 如果 ColumnA 为“not_translated”,则在 ColumnB 中保留 null。
  3. 删除 ColumnA 为空的行。

在代码中:

# If B is null, take next value. Otherwise, keep value.
df['ColumnB_new'] = np.where(df['ColumnB'].notna(), df['ColumnB'], df['ColumnB'].shift(-1))

# If A is 'not_tranlsated', leave null
df['ColumnB_new'] = np.where(df['ColumnA'].eq('not_translated'), np.nan, df['ColumnB_new'])

# Result
df = df.loc[df['ColumnA'].notna(), ['ColumnA','ColumnB_new']]
print(df)

ColumnA ColumnB_new
0 This Das
2 is ist
4 a ein
6 not_translated NaN
7 text text
8 . .

关于Python 根据另一列中的 Nan 或 boolean 值在一列中移动值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68001377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com