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

Python 基于条件语句将条件列C设置为a列或B列的最快方法,python,pandas,dask,Python,Pandas,Dask,我有一个2毫米的数据帧。我有一个问题,在用分隔符拆分一个列之后,似乎没有一致数量的列合并到这个拆分中 为了解决这个问题,我尝试使用一个有条件的新列C,其中,如果条件为true,则应等于列a。如果为false,则设置为等于列B 编辑:在尝试提供的解决方案时,我尝试了下面列出的一些代码,但没有更新任何行。下面是我正在使用的数据集的一个更好的示例: Scenario meteorology time of day 0 xxx D7 Bus. Hours 1

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

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

尝试并计算时间,毕竟
打印(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))

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

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'])

当你说2毫米行时,你真的是指
2*(10^12)
行吗?不知道人们说销售收入为1百万毫米guess@Psidom200万(2*M*M),其中M=1000。我想大概是2^21行。我不明白为什么200万行会对您编写的代码有问题。稍微快一点
df.loc[df.a.isin([1,2]),'C']
这似乎比光速运行得快。我刚到达斯克。我不需要“.loc”方法吗?我可以引用目标列,在括号内没有逗号,就像熊猫一样?@Michael James它与iloc相同,iloc仅在熊猫中。谢谢您的帮助。我尝试过这种方法,但行似乎没有更新。我将用我在这里尝试的内容更新我的问题,以及一些更具体的数据集示例。