我有下一个问题要解决。
我有一个巨大的 Dataframe (14k行x1600列),由1和0组成。在考虑新列时,我需要获得唯一的新值。意思是,我有索引栏和第一列,如果我考虑第二列,我需要能够获得多少行与第一列不同的“计数”。然后,考虑第三列,并获得不同值的计数,从第一和第二列等。例如,以下数据集:
import pandas as pd
data = [[1, 1, 0], [1, 0, 0], [0, 1, 1], [1, 1, 1], [0, 0, 1]]
df = pd.DataFrame(data, columns=["S1", "S2", "S3"])
df
(1表示存在,0表示不存在,这意味着在第1列中,索引(0)为“已观察到”,在第2列中为“0”,表示未观察到,依此类推)。
因为我不知道如何编写代码,所以我不知道是否更容易在结尾处获得一个新行和新值的计数,或者转置df并获得一个具有这些值的新列。在任何情况下,我期望的输出应该是这样的:
import pandas as pd
data = [[1, 1, 0], [1, 0, 0], [0, 1, 1], [1, 1, 1], [0, 0, 1], [3, 1, 1]]
df_out = pd.DataFrame(data, columns=["S1", "S2", "S3"])
df_out
在这里,您可以看到,只有第1列有3个唯一的索引值对,当我们考虑第1列和第2列时,我们有2个重复值,但有1个新值,当我们添加第三列时,与第1列和第2列相比,我们只有1个新值。。。
所以,为了澄清我自己,请看下图。在此处输入图像描述
对于本例,我需要计算第1列中“1”的总数,然后,当我考虑第2列时,我需要计算案例[0,1],当我考虑第三列时,我需要计算案例[0,0,1],对于第四列,我需要计算案例[0,0,0,1],依此类推。
在这个链接中,您可以下载原始df的一小部分,最后是唯一的“1”(手动获取)
我需要获得整个 Dataframe 的那种输出。
希望有人能帮忙。
谢谢
2条答案
按热度按时间2g32fytz1#
您可以使用@Corrarien的解决方案进行一些预处理:
或者,或者
旧答案
您可以使用移位的 Dataframe 和总和计算差值:
输出:
工作原理:
w8rqjzmb2#
对于本例,我需要计算第1列中“1”的总数,然后,当我考虑第2列时,我需要计算案例[0,1],当我考虑第三列时,我需要计算案例[0,0,1],对于第四列,我需要计算案例[0,0,0,1],依此类推。
事实上,您希望计算第一次出现“1”的位置: