簡體   English   中英

獲取值和列名稱

[英]Get values and column names

我有一個像這樣的pandas數據框:

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)

如何獲取非零的每個單元格的值和列名? 所以在這種情況下,我想要2個表,一個給我每個值!每行= 0:

a 5
a 2
b 2
b 7
d 2

一個給我這些值的列名:

a 2
a 3
b 1
b 4
d 2

謝謝!

你可以使用stack for Series ,然后通過boolean indexingrename_axisreset_index和last drop column進行過濾,或者按子集選擇列:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM