我找到了如何使用命令 df.loc[:, (df != 0).any(axis=0)] 删除所有行中带零的列
,并且我需要做同样的事情,但给定行号。
例如,对于以下 df
In [75]: df = pd.DataFrame([[1,1,0,0], [1,0,1,0]], columns=['a','b','c','d'])
In [76]: df
Out[76]:
a b c d
0 1 1 0 0
1 1 0 1 0
给我第 0 行非零的列,我期望结果:
a b
0 1 1
对于第 1 行,得到:
a c
1 1 1
我尝试了很多命令组合,但找不到解决方案。
gia hạn:
我有一个 300x300 矩阵,我需要更好地可视化其结果。
下面的伪代码试图显示我需要的内容
for i in range(len(df[rows])):
_df = df.iloc[i]
_df = _df.filter(remove_zeros_columns)
print('Row: ', i)
print(_df)
结果:
Row: 0
a b
0 1 1
Row: 1
a c f
1 1 5 10
Row: 2
e
2 20
最诚挚的问候。克莱森·里奥斯。
您可以更改数据结构:
df = df.reset_index().melt('index', var_name='columns').query('value != 0')
print (df)
index columns value
0 0 a 1
1 1 a 1
2 0 b 1
5 1 c 1
如果需要通过 连接的值创建新列,
比较值是否不等于 DataFrame.ne
并使用矩阵乘法 DataFrame.dot
:
df['new'] = df.ne(0).dot(df.columns + ', ').str.rstrip(', ')
print (df)
a b c d new
0 1 1 0 0 a, b
1 1 0 1 0 a, c
biên tập:
for i in df.index:
row = df.loc[[i]]
a = row.loc[:, (row != 0).any()]
print ('Row {}'.format(i))
print (a)
hoặc:
def f(x):
print ('Row {}'.format(x.name))
print (x[x!=0].to_frame().T)
df.apply(f, axis=1)
Row 0
a b
0 1 1
Row 1
a c
1 1 1
Tôi là một lập trình viên xuất sắc, rất giỏi!