【发布时间】:2013-10-19 02:34:55
【问题描述】:
我有一个如下所示的 pandas 数据框:
A B C
1 2 1
3 4 0
5 2 0
5 3 1
如果 C 的值为 1,则想从 A 中获取值,如果 C 为 0,则想从 B 中获取值。我该怎么做?最终我想得到一个向量,如果 C 为 1,则值为 A,如果 C 为 0,则值为 B,即[1,4,2,5]
【问题讨论】:
我有一个如下所示的 pandas 数据框:
A B C
1 2 1
3 4 0
5 2 0
5 3 1
如果 C 的值为 1,则想从 A 中获取值,如果 C 为 0,则想从 B 中获取值。我该怎么做?最终我想得到一个向量,如果 C 为 1,则值为 A,如果 C 为 0,则值为 B,即[1,4,2,5]
【问题讨论】:
假设您的意思是“来自 A 的 C 的值为 1,如果 C 的值为 0,则来自 B”,考虑到您的预期输出,这是有道理的,我可能会使用 Series.where:
>>> df
A B C
0 1 2 1
1 3 4 0
2 5 2 0
3 5 3 1
>>> df.A.where(df.C, df.B)
0 1
1 4
2 2
3 5
dtype: int64
读作“如果 C 的对应值为真,则使用 A 的值制作系列,否则使用 B 的对应值”。这里因为 1 为真,我们可以只使用 df.C,但我们可以使用 df.C == 1 或 df.C*5+3 < 4 或任何其他布尔系列。
【讨论】:
df 中有字符串。如果这样做,结果将不是上面@DSM 显示的那样,它将是原始的df.A Series。