我很抱歉这么长时间,但我想尽可能完整地解释。我完全不知道如何解决这个问题
设置:
我有两个数据帧,第一个数据帧在第一列中列出了所有可能的值,该列中没有重复的值。我们叫它df_01。这些都是每个列表中常见的可能值。所有附加列表示独立列表。每个包含一个数字,表示所有可能值的任何给定值在该列表上的天数。此数据帧(df_01)的形状为(9277,32)。这些维度可以更改,但通常保持不变。下面是它的一个小例子
df_01在采取任何行动之前:
index values list01 list02 ... list30 list31
0 aaa 5 1 ... NaN 83
1 bbb NaN NaN ... NaN 4
2 ccc 20 NaN ... NaN 32
3 ddd 1 27 ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
9274 qqq NaN 15 ... NaN 6
9275 rrr 238 NaN ... NaN 102
9276 sss 3 2 ... NaN NaN
9277 ttt 12 NaN ... NaN 99
第一个数据帧(df_01)将始终是前一天的值
第二个数据帧。让我们称之为df_2,它的行数总是较少,长度每天都在变化,但列数总是与(df_01)相同。它目前的形状是(1351,32)。在这个数据帧(df_2)中,第一列包含截至今天每个列表中的所有公共值,并且没有重复项。如果该值现在在列表中,则此数据帧(df_2)中的其他列的值为1,如果不在列表中,则为NaN。这里有一个例子
df_02在采取任何行动之前:
index values list01 list02 ... list30 list31
0 aaa 1 1 ... NaN 1
1 bbb NaN 1 ... 1 1
2 ddd 1 1 ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
1349 qqq NaN NaN ... 1 1
1350 rrr 1 NaN ... 1 NaN
1351 sss NaN 1 ... NaN 1
问题是:
我想做的事情如下
1)对于每列中的每个值,如果值存在于第一个数据帧(df_01)中,而不存在于第二个数据帧(df_02),则其(df_01)中的计数器将按每列重置为NaN
2)然后,对于第二个数据帧(df_02)的每一列中的每一个值,如果两个数据帧上的同一列中存在该值,则将该值相加
3)如果(df_01)的列表01上的aaa=5,且(df_2)的列表01上的aaa=1,则(df_02)的列表01上的aaa将变为6。这将保持连续计数
4)如果两者中的值均为NaN,则无需执行任何操作
5)如果一个值为NaN on(df_01)且为1 on(df_02),则该值保持为1
***在求和之前,df_02中的值始终为1或NaN。值列中的值是否在当天的单个列表中是一个二进制选择
***注意值ccc和ttt在(df_01)中,因为它们是可能的值,而不是(df_02),因为它们今天不在列表中
***诸如*NaN*
或*6*
等值周围的星号表示将发生变化的值,而这些值实际上并不在数据中
执行此过程后,数据帧应如下所示:
df_01
index values list01 list02 ... list30 list31
0 aaa 5 1 ... NaN 83
1 bbb NaN NaN ... NaN 4
2 ccc NaN NaN ... NaN NaN
3 ddd 1 27 ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
9274 qqq NaN *NaN* ... NaN 6
9275 rrr 238 NaN ... NaN *NaN*
9276 sss *NaN* 2 ... NaN 24
9277 ttt 12 NaN ... NaN 99
df_02
index values list01 list02 ... list30 list31
0 aaa *6* *2* ... NaN *84*
1 bbb NaN 1 ... 1 *5*
2 ddd *2* *28* ... NaN NaN
. . . . ... . .
. . . . ... . .
. . . . ... . .
1349 qqq NaN NaN ... 1 *7*
1350 rrr *239* NaN ... 1 NaN
1351 sss NaN *3* ... NaN *25*
我怎样才能完成这样的事情呢?我甚至不知道从哪里开始。任何想法,即使不完全有效,只要能给我指出正确的方向,我都将不胜感激。如果有什么需要澄清的,请告诉我
谢谢
这应该是你想要的。我们将循环每一行,然后分别更新它们。确保
cols
列表包含基于df的正确列我们必须在df1的更新中使用
.fillna('-')
的原因是您不能用NaN替换值,因此我们必须用其他内容填充它,然后我们可以将其替换回NaN相关问题 更多 >
编程相关推荐