我有一个大型pandas数据帧,由许多行和列组成,其中包含二进制数据,如“0 | 1”、“0 | 0”、“1 | 0”,我希望将其拆分为2个数据帧,并/或展开,以便(这两个数据帧对我都有用):
a b c d
rowa 1|0 0|1 0|1 1|0
rowb 0|1 0|0 0|0 0|1
rowc 0|1 1|0 1|0 0|1
变成
^{pr2}$和/或
df1: a b c d
rowa 1 0 0 1
rowb 0 0 0 0
rowc 0 1 1 0
df2: a b c d
rowa 0 1 1 0
rowb 1 0 0 1
rowc 1 0 0 1
目前我正在尝试做如下的事情,但相信这不是很有效,任何指导都会有帮助。在
Atmp_dict=defaultdict(list)
Btmp_dict=defaultdict(list)
for index,row in df.iterrows():
for columnname in list(df.columns.values):
Atmp_dict[columnname].append(row[columnname].split('|')[0])
Btmp_dict[columnname].append(row[columnname].split('|')[1])
用户2734178很接近,但他或她的回答有一些问题。这里有一个小小的变化
这是另一个稍微更优雅的选择。将循环替换为:
^{pr2}$因为看起来所有的值都是字符串,所以可以使用
.str
访问器将管道作为分隔符comme ca来拆分所有内容然后您可能需要使用}重新构造为
astype(int)
将df1
和{int
列。在这是相当紧凑的,但似乎应该有一个更简单,更紧凑的方法。在
或者像其他答案一样在列上循环。我觉得没关系。请注意,因为问题指定了二进制数据,所以只做},而不是使用},这是可以的(而且更简单)。在
str[0]
和{split
或{或者你可以这样做,这看起来很傻,但实际上没有什么问题,它相当紧凑。在
^{pr2}$stack
只需将其转换为一个序列,这样就可以使用str
,然后{相关问题 更多 >
编程相关推荐