簡體   English   中英

"在以值為條件的新熊貓列中加入列名"

[英]join column names in a new pandas columns conditional on value

我有以下數據集:

data = {'Environment': ['0', '0', '0'],
        'Health': ['1', '0', '1'],
            'Labor': ['1', '1', '1'],
             }

df = pd.DataFrame(data, columns=['Environment', 'Health', 'Labor']) 

我想創建一個新列 df['Keyword'] ,其值是值 > 0 的列名的連接。

預期結果:

data = {'Environment': ['0', '0', '0'],
            'Health': ['1', '0', '1'],
                'Labor': ['1', '1', '1'],
                     'Keyword': ['Health, Labor', 'Labor', 'Health, Labor']}
    
df_test = pd.DataFrame(data, columns=['Environment', 'Health', 'Labor', 'Keyword']) 
df_test
df = pd.DataFrame(data, columns=['Environment', 'Health', 'Labor']) 

我該怎么做?

帶有.apply()<\/code>的其他版本:

df['Keyword'] = df.apply(lambda x: ', '.join(b for a, b in zip(x, x.index) if a=='1'),axis=1)
print(df)

另一種使用mask<\/code>和stack<\/code>的方法,然后使用 groupby 來聚合項目。

stack<\/code>默認會丟棄 na 值。

df['keyword'] = df.mask(
               df.lt(1)).stack().reset_index(1)\
                        .groupby(level=0)["level_1"].agg(list)

print(df)

   Environment  Health  Labor          keyword
0            0       1      1  [Health, Labor]
1            0       0      1          [Labor]
2            0       1      1  [Health, Labor]

樣本數據值中的第一個問題是字符串,所以如果想要比較更多用途:

df = df.astype(float).astype(int)

暫無
暫無

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

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