在Python中使用Pandas打印列的索引

2024-06-01 20:46:55 发布

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

我有一个输入数据框,如下所示:

print (df)
    Id  A  B  C  D
0  101  0  0  0  1
1  102  0  0  0  0
2  103  1  0  1  0
3  104  1  0  1  1

输出:我想打印其中包含“1”的列的索引。输出数据帧应该如下所示。如果1不存在,则应返回空字符串

Id 101- D (4th index) has 1
Id 102- None
Id 104- A, C and D which are 1,3,4 indexes

因此,示例输出如下所示:

print (df)
    Id  Result
0  101       4
1  102        
2  103     1,3
3  104   1,3,4

Tags: and数据字符串noneid示例dfwhich
3条回答

您也可以使用applylambda功能来实现这一点。我将答案存储在一个单独的数据框中

df = pd.DataFrame({'Id':[101,102,103,104], 'A':[0,0,1,1], 'B':[0,0,0,0], 'C':[0,0,1,1], 'D':[1,0,0,1]})

result = pd.DataFrame({'Id': df.Id})

result['Result'] = df.apply(
    lambda x: ','.join(str(ele) for ele in [id+1 for id,val in enumerate(x[1:]) if val is 1]), 
    axis=1
)

print(result)

结果

    Id Result
0  101      4
1  102       
2  103    1,3
3  104  1,3,4

使用^{}进行矩阵乘法,由helper RangeIndex乘以转换为字符串的列的长度

无法处理的列被^{}设置为索引

#all columns without first df.columns[1:]
c = pd.RangeIndex(1, len(df.columns[1:]) + 1).astype(str) + ','
df = df.set_index('Id').dot(c).str[:-1].reset_index(name=' Result')
print (df)
    Id  Result
0  101       4
1  102        
2  103     1,3
3  104   1,3,4

编辑:

print (df)
    Id  Quantity  A  B  C  D
0  101        10  0  0  0  1
1  102        50  0  0  0  0
2  103        80  1  0  1  0
3  104        60  1  0  1  1


#all columns without first and second df.columns[2:]
c = pd.RangeIndex(1, len(df.columns[2:]) + 1).astype(str) + ','
df = df.set_index(['Id','Quantity']).dot(c).str[:-1].reset_index(name='Result')
print (df)
print (df)
    Id  Quantity Result
0  101        10      4
1  102        50       
2  103        80    1,3
3  104        60  1,3,4

我可以这样做。。。我使用StringIO读取您的数据,但从csv读取数据的原理相同

from io import StringIO
import pandas as pd

data = ''' Id | A | B | C | D

 101 | 0 | 0 | 0 | 1

 102 | 0 | 0 | 0 | 0

 103 | 1 | 0 | 1 | 0

 104 | 1 | 0 | 1 | 1'''

df = pd.read_csv(StringIO(x), sep='\s+\|\s+', engine='python', index_col='Id')
df.apply(lambda x: ','.join(map(str, pd.np.where(x==1)[0]+1)), axis=1).reset_index(name='Result')

输出:

    Id Result
0  101      4
1  102
2  103    1,3
3  104  1,3,4

相关问题 更多 >