获取值和列名

2024-03-29 11:56:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,看起来像这样:

data = {'1' : [0, 2, 0, 0], '2' : [5, 0, 0, 2], '3' : [2, 0, 0, 0], '4' : [0, 7, 0, 0]}
df = pd.DataFrame(data, index = ['a', 'b', 'c', 'd'])
df


    1   2   3   4
a   0   5   2   0
b   2   0   0   7
c   0   0   0   0
d   0   2   0   0

我知道我可以(分别)通过执行以下操作获得每行的最大值和对应的列名:

df.max(1)
df.idxmax(1)

如何获取每个不为零的单元格的值和列名? 所以在这种情况下,我想要两个表,一个给我每个值!=每行0:

a 5
a 2
b 2
b 7
d 2

其中一个给了我这些值的列名:

a 2
a 3
b 1
b 4
d 2

谢谢!你知道吗


Tags: 数据dataframedfdataindex情况maxpd
1条回答
网友
1楼 · 发布于 2024-03-29 11:56:01

您可以对Series使用^{},然后按^{}^{}^{}和最后一列^{}筛选,或按子集选择列:

s = df.stack()
df1 = s[s!= 0].rename_axis(['a','b']).reset_index(name='c')
print (df1)
   a  b  c
0  a  2  5
1  a  3  2
2  b  1  2
3  b  4  7
4  d  2  2

df2 = df1.drop('b', axis=1)
print (df2)
   a  c
0  a  5
1  a  2
2  b  2
3  b  7
4  d  2

df3 = df1.drop('c', axis=1)
print (df3)
   a  b
0  a  2
1  a  3
2  b  1
3  b  4
4  d  2

df3 = df1[['a','c']]
print (df3)
   a  c
0  a  5
1  a  2
2  b  2
3  b  7
4  d  2

df3 = df1[['a','b']]
print (df3)
   a  b
0  a  2
1  a  3
2  b  1
3  b  4
4  d  2

相关问题 更多 >