gpt4 book ai didi

python - 如何删除 pandas 中给定行中仅包含零的列

转载 作者:行者123 更新时间:2023-11-28 21:33:00 24 4
gpt4 key购买 nike

我找到了如何使用命令 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

我尝试了很多命令组合,但找不到解决方案。

更新:

我有一个 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

编辑:

for i in df.index:
row = df.loc[[i]]

a = row.loc[:, (row != 0).any()]
print ('Row {}'.format(i))
print (a)

或者:

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

关于python - 如何删除 pandas 中给定行中仅包含零的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com