<pre><code>data_dict = {
'Species_ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'Habitat_A': ['X', '', 'X', 'X', '', 'X', 'X', '', 'X', ''],
'Habitat B,C,&D': ['X', '', 'X', 'X', '', 'X', 'X', '', 'X', ''],
'Habitat_E': ['', 'X', '', 'X', 'X', '', 'X', 'X', '', 'X'],
}
df = pd.DataFrame.from_dict(data_dict)
df.iloc[:, 1:] = df.iloc[:, 1:].apply(lambda x: pd.Series([y[0] if y[1] == 'X' else '' for y in x.iteritems()]), axis=1)
df['All_habitats(CONCAT)'] = df.apply(lambda x: ','.join(filter(None, x[1:])), axis=1)
print(df)
</code></pre>
<p>印刷品:</p>
<pre class="lang-none prettyprint-override"><code> Species_ID Habitat_A Habitat B,C,&D Habitat_E All_habitats(CONCAT)
0 1 Habitat_A Habitat B,C,&D Habitat_A,Habitat B,C,&D
1 2 Habitat_E Habitat_E
2 3 Habitat_A Habitat B,C,&D Habitat_A,Habitat B,C,&D
3 4 Habitat_A Habitat B,C,&D Habitat_E Habitat_A,Habitat B,C,&D,Habitat_E
4 5 Habitat_E Habitat_E
5 6 Habitat_A Habitat B,C,&D Habitat_A,Habitat B,C,&D
6 7 Habitat_A Habitat B,C,&D Habitat_E Habitat_A,Habitat B,C,&D,Habitat_E
7 8 Habitat_E Habitat_E
8 9 Habitat_A Habitat B,C,&D Habitat_A,Habitat B,C,&D
9 10 Habitat_E Habitat_E
</code></pre>
<h2>测试.csv中的2095行*19列(虚拟数据)</h2>
<pre><code>import pandas as pd, time
tic = time.perf_counter()
df = pd.read_csv(r'c:\Users\Alex20\Documents\Habitats.csv')
df.iloc[:, 1:] = df.iloc[:, 1:].apply(lambda x: pd.Series([y[0] if y[1] == 'X' else '' for y in x.iteritems()]), axis=1)
df['All_habitats(CONCAT)'] = df.apply(lambda x: ','.join(filter(None, x[1:])), axis=1)
print(df)
print(f"Processed in {time.perf_counter() - tic:0.4f} seconds")
</code></pre>
<p>输出:</p>
<pre class="lang-none prettyprint-override"><code> Species_ID ... All_habitats(CONCAT)
0 1 ... HabitatA,HabitatB,HabitatC,HabitatD,HabitatF,H...
1 2 ... HabitatC,HabitatG,HabitatP
2 3 ... HabitatA,HabitatB,HabitatC,HabitatE,HabitatG,H...
3 4 ... HabitatA,HabitatB,HabitatE,HabitatJ,HabitatL,H...
4 5 ... HabitatD,HabitatI,HabitatK,HabitatL,HabitatM,H...
... ... ... ...
2090 2091 ... HabitatA,HabitatB,HabitatE,HabitatF,HabitatG,H...
2091 2092 ... HabitatA,HabitatB,HabitatC,HabitatE,HabitatF,H...
2092 2093 ... HabitatB,HabitatC,HabitatD,HabitatG,HabitatH,H...
2093 2094 ... HabitatC,HabitatF,HabitatG,HabitatI,HabitatK,H...
2094 2095 ... HabitatB,HabitatE,HabitatG,HabitatI,HabitatK,H...
[2095 rows x 19 columns]
Processed in 0.4257 seconds
</code></pre>
<p><strong>.csv</strong><br/>
<a href="https://i.stack.imgur.com/a1seL.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/a1seL.png" alt="enter image description here"/></a></p>