这里的一部分是我输入:大熊猫仅更换一列
import pandas as pd
import numpy as np
list1 = [10,79,6,38,4,557,12,220,46,22,45,22]
list2 = [4,3,23,6,234,47,312,2,426,42,435,23]
df = pd.DataFrame({'A' : list1, 'B' : list2}, columns = ['A', 'B'])
df['C'] = np.where (df['A'] > df['B'].shift(-2), 1, np.nan)
print (df)
产生这样的输出:
A B C
0 10 4 NaN
1 79 3 1.0
2 6 23 NaN
3 38 6 NaN
4 4 234 NaN
5 557 47 1.0
6 12 312 NaN
7 220 2 1.0
8 46 426 NaN
9 22 42 NaN
10 45 435 NaN
11 22 23 NaN
我需要做的是改变列“C”是一个集三个1连续,不重叠。期望的输出是:
A B C
0 10 4 NaN
1 79 3 1.0
2 6 23 1.0
3 38 6 1.0
4 4 234 NaN
5 557 47 1.0
6 12 312 1.0
7 220 2 1.0
8 46 426 NaN
9 22 42 NaN
10 45 435 NaN
11 22 23 NaN
因此,第2,3和6行从NaN变为1.0。第7行已经有一个1.0,它被忽略。第8行和第9行需要保留NaN,因为第7行是前一组的最后一个条目。
我不知道是否有更好的方法来创建列'C',在创建时会这样做。
我已经尝试了几个版本的fillna和ffill,他们都没有为我工作。
这似乎很令人费解,但我试图孤立行ID对每个1.0这一行:
print (df.loc[df['C'] == 1])
哪个正确输出这样的:尽管我知道,信息
A B C
1 79 3 1.0
5 557 47 1.0
7 220 2 1.0
,我不知道如何从那里出发。
非常感谢你为您的帮助提前, 大卫
如果你有一个序列为'1大,NaN,1,1大,NaN,NaN'?你想要结果是什么? – Psidom
谢谢你看psidom - 结果将全部为1的 –
行。那么你的情况应该是索引8和9? – Psidom