我有下表:
代碼 | 價值 |
---|---|
[1,0] | [是的,沒有] |
[1,2,3] | [是的,不,不知道] |
我想將這兩個 colmun 組合成一個,如下所示:
結果 |
---|
1:是,0:否 |
1:是,2:不是,3:不知道 |
uj5u.com熱心網友回復:
使用帶有連接壓縮值的嵌套串列推導:
df['Result'] = [', '.join(f'{x}:{y}' for x, y in zip(a, b))
for a, b in zip(df.code, df.value)]
print (df)
code value Result
0 [1, 0] [Yes, No] 1:Yes, 0:No
1 [1, 2, 3] [Yes, No, don't know] 1:Yes, 2:No, 3:don't know
uj5u.com熱心網友回復:
使用apply
,但請注意,這比 python 串列理解效率低:
df['Result'] = df.apply(lambda r: ', '.join([f'{a}: {b}'
for a,b in zip(r['code'],
r['value'])]), axis=1)
輸出:
code value Result
0 [1, 0] [Yes, No] 1: Yes, 0: No
1 [1, 2, 3] [Yes, No, don't know] 1: Yes, 2: No, 3: don't know
可重現的輸入:
df = pd.DataFrame({'code': [[1, 0], [1, 2, 3]],
'value': [['Yes', 'No'], ['Yes', 'No', "don't know"]],
'Result': ['1: Yes, 0: No', "1: Yes, 2: No, 3: don't know"]}
)
uj5u.com熱心網友回復:
就像@mozway提到的那樣,apply
可能是效率最低的解決方案,但是OP在問題中添加了相應的標簽。因此,在一個可以說是更 Pythonic 的版本中,該問題的另一種可能的解決方案是:
df = pd.DataFrame(
{
'code': [[1, 0], [1, 2, 3]],
'value': [['Yes', 'No'], ['Yes', 'No', 'don\'t know']]
}
)
df.apply(lambda x: dict(zip(x['code'], x['value'])), axis=1)
0 {1: 'Yes', 0: 'No'}
1 {1: 'Yes', 2: 'No', 3: 'don't know'}
然而,@jezrael 或類似實作的答案是更好的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456669.html
上一篇:Pandas按兩個欄位分組,從其他組中選擇最小日期和下一個最大日期
下一篇:資料框按某列分組并重復該行n次