基于条件语句将条件列C设置为a列或B列的最快方法

2024-04-29 04:16:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2毫米的数据帧。我有一个问题,在用分隔符拆分一个列之后,似乎没有一致数量的列合并到这个拆分中

为了解决这个问题,我尝试使用一个有条件的新列C,其中,如果条件为true,则应等于列a。如果为false,则设置为等于列B

编辑:在尝试提供的解决方案时,我尝试了下面列出的一些代码,但没有更新任何行。下面是我正在使用的数据集的一个更好的示例:

  Scenario meteorology time of day
0      xxx          D7  Bus. Hours
1      yyy          F3    Offshift
2      zzz  Bus. Hours         NaN
3      aaa    Offshift         NaN
4      bbb    Offshift         NaN

前两排排列整齐。场景、气象学和时间已从合并列中正确分割出来。然而,在其他行上,合并列没有气象学数据。因此,“一天中的时间”数据填充在“气象学”中,导致“一天中的时间”为nan

以下是建议的方法:

from dask import dataframe as dd

ddf = dd.from_pandas(df, npartitions=10)
ddf[(ddf.met=='Bus. Hours') | (ddf.met == 'Offshift')]['time'] = ddf['met']
ddf[(ddf.met=='Bus. Hours') | (ddf.met == 'Offshift')]['met'] = np.nan

这不会更新“time”或“met”中的相应行

我也尝试过在熊猫身上这样做:

df.loc[(df.met == 'Bus.Hours') | (df.met == 'Offshift'), 'time'] = df['met']
df.loc[(df.met == 'Bus.Hours') | (df.met == 'Offshift'), 'met'] = np.nan

这种方法可以运行,但似乎无限期地挂起


Tags: 数据方法fromdftime时间nan条件
2条回答

工作解决方案根据评论进行了修改,结果如下:

cond = df.met.isin(['Bus. Hours', 'Offshift'])
df['met'] = np.where(cond, np.nan, df['met'])
df['time'] = np.where(cond, df['met'], df['time'])

尝试,并计算时间,毕竟print(ddf.head(10))以查看输出

from dask import dataframe as dd

ddf = dd.from_pandas(df, npartitions=10)
ddf[(ddf.A == 2) | (ddf.A == 1)]['C'] = ddf['A']
ddf[(ddf.A != 2) & (ddf.A != 1)]['C'] = ddf['B']

print(ddf.head(x))

相关问题 更多 >