[英]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 indexing
, rename_axis
, reset_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.