【发布时间】:2019-01-12 11:40:52
【问题描述】:
我有一个包含 A 、B 、C 列的数据框。我想比较 B 和 C 列并创建两列 A-1(当前行年份 -1)和 A-2(当前行年份 -2)其中 A 是年份列。
示例:在 1971 年的数据框中,B 列有 apple 、 orange C 列只有苹果,1970 年有 B-banana、apple 和 C-apple。 现在,对于 1971 年的每一行,我们尝试为 A-1(1970)、A-2(1969) 列生成值。在 (A-1)1970 年,苹果在 B、C 列中都被捕获,所以我们将 1971 年的前两行标记为“是”,然后将第三行标记为“否”,因为 1970 年没有橙色。
因此,对于每一行,我们都会考虑年份(比如 1971 年)并检查 B 和 C 值,并查看该特定 B 值是否也在 year-1(1970) 和 year-2(1969 的 C 列中捕获,在这种情况下,它将是 nan,因为我们的数据框中没有 1969 的任何记录)并相应地标记它们。
数据框:
A B C D
1971 apple apple yes
1971 apple apple yes
1971 orange nan no
1970 banana nan no
1970 apple apple yes
1972 mango mango yes
1972 banana banana yes
1972 orange orange yes
1972 apple apple yes
1973 banana nan no
1973 mango mango yes
1973 apple nan no
1974 orange nan no
输出:
A B C A-1 A-2
1971 apple apple yes nan
1971 apple apple yes nan
1971 orange nan no nan
1970 banana nan nan nan
1970 apple apple nan nan
1972 mango mango no no
1972 banana banana no no
1972 orange orange no no
1972 apple apple yes yes
1973 banana nan yes no
1973 mango mango yes no
1973 apple nan yes yes
1974 orange nan no yes
我想不通,请帮助我。
【问题讨论】:
-
好的,我马上编辑这个问题
-
@unutbu ,请查看已编辑的问题并提供解决方案
-
我对你的最后一句话有点困惑,“所以对于每一行,我们都会考虑年份并检查 B 值......”。您的意思是说“所以对于每一行,我们都会考虑年份并检查B 和C 值......”?换句话说,
yes值是否表示 B 和 C 值都存在于相应年份? -
是的,我的错误我会改正句子,还有一件事你应该清楚的是,是的值表示对应的年份 -1 和对应的年份 -2 都存在 B 和 C 值跨度>
-
我认为您给出的示例还没有回答所有场景组合。你能再改变几行例子吗?
标签: python pandas numpy pivot pandas-groupby