第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據(jù)條件提取列值

根據(jù)條件提取列值

繁星點點滴滴 2021-03-31 21:14:47
我有以下數(shù)據(jù)框df = pd.DataFrame({    'Column_1': ['Position', 'Start', 'End', 'Position'],     'Original_1': ['Open', 'Barn', 'Grass', 'Bubble'],     'Latest_1': ['Shut', 'Horn', 'Date', 'Dinner'],     'Column_2': ['Start', 'Position', 'End', 'During'],     'Original_2': ['Sky', 'Hold', 'Car', 'House'],     'Latest_2': ['Pedal', 'Lap', 'Two', 'Force'],     'Column_3': ['Start', 'End', 'Position', 'During'],     'Original_3': ['Leave', 'Dog', 'Block', 'Hope'],     'Latest_3': ['Sear', 'Crawl', 'Enter', 'Night']})對于“位置_1”,“列_2”或“列_3”中的“位置”一詞的每個實例,我想捕獲“ Original_1”,“ Original_2”,“ Original_3”中的關(guān)聯(lián)值并將它們分配給名為“ Original_Values”。以下代碼可以完成此操作,但只能逐列進行。df['Original_Value1'] = df.loc[df['Column_1'] == 'Position', 'Original_1']df['Original_Value2'] = df.loc[df['Column_2'] == 'Position', 'Original_2']df['Original_Value3'] = df.loc[df['Column_3'] == 'Position', 'Original_3']有沒有一種方法可以重新創(chuàng)建上面的代碼,使其遍歷整個數(shù)據(jù)幀(而不是按指定的列)?我希望創(chuàng)建一個具有以下結(jié)果的列(“ Original_values”):0      Open1      Hold2     Block3    BubbleName: Original_Values, dtype: object
查看完整描述

3 回答

?
浮云間

TA貢獻1829條經(jīng)驗 獲得超4個贊

一種方法是使用df.apply():


def choose_orig(row):

    if row['Column_1'] == 'Position':

        return row['Original_1']

    elif row['Column_2'] == 'Position':

        return row['Original_2']

    elif row['Column_3'] == 'Position':

        return row['Original_3']

    return ''


df['Original_Values'] = df.apply(choose_orig, axis=1)

該axis=1給的說法df.apply()原因choose_orig()函數(shù)被調(diào)用一次,數(shù)據(jù)幀中的每一行。


請注意'',當所有列均不匹配單詞時,它將使用空字符串的默認值'Position'。


查看完整回答
反對 回復 2021-04-09
?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

如何使用前3個cols創(chuàng)建遮罩(或指定它們的名稱)并將其與6s到9 cols中的值相乘(或指定它們的名稱)。然后采用max()值刪除nan。


df['Original_Values'] = ((df.iloc[:,:3] == 'Position') * df.iloc[:,6:9].values).max(1)


print(df['Original_values'])

返回值:


0      Open

1      Hold

2     Block

3    Bubble

Name: Original_Value, dtype: object


查看完整回答
反對 回復 2021-04-09
?
蝴蝶不菲

TA貢獻1810條經(jīng)驗 獲得超4個贊

這是通過一些堆棧進行操作的一種愚蠢的方法,如果堆棧很大df并且需要避免,則可能會更好axis=1。

  • 堆疊前三列以創(chuàng)建索引列表,以及該'Original'值對應于哪一列

  • 堆疊要從中獲取值的列。使用上面的列表為它重新編制索引,以便您返回適當?shù)闹怠?/p>

  • df根據(jù)原始行索引將這些值恢復為原始值。

這是代碼:

import re


mask_list = ['Column_1', 'Column_2', 'Column_3']

val_list = ['Original_1', 'Original_2', 'Original_3']


idx = df[mask_list].stack()[df[mask_list].stack() == 'Position'].index.tolist()

idx = [(x , re.sub('(.*_)', 'Original_', y)) for x, y in idx]


df['Original_Values'] = df[val_list].stack().reindex(idx).reset_index(level=1).drop(columns='level_1')

df 就是現(xiàn)在:


   Column_1  Column_2  Column_3 ... Original_Values

0  Position     Start     Start ...            Open

1     Start  Position       End ...            Hold

2       End       End  Position ...           Block

3  Position    During    During ...          Bubble

如果'Position'在中的任何列中未找到mask_list,則Original_Values成為NaN該行。如果您需要將其縮放到更多列,只需將它們添加到mask_list和即可val_list。


查看完整回答
反對 回復 2021-04-09
  • 3 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號