簡體   English   中英

將多個pandas列合並到新列中

[英]Merge multiple pandas columns into new column

我有一個數據框,其中一些列表明是否看到了一組調查問題。 例如:

Q1_Seen    Q2_Seen    Q3_Seen    Q4_Seen
    Q1a        nan        nan        nan
    nan        Q2a        nan        nan
    nan        nan        Q3d        nan
    nan        Q2c        nan        nan

我想將這些列折疊成一列,比如Q_Seen ,它將采用以下形式:

Q_Seen
   Q1a
   Q2a
   Q3d
   Q2c

請注意,每一行都是互斥的:如果其中一列中有值,則其他所有列都是NaN。

我嘗試用pd.concat做這個,但它似乎沒有產生正確的結果。

試試這個:

df['Q_Seen'] = df.stack().values

>>> df

Q1_Seen    Q2_Seen    Q3_Seen     Q4_Seen     Q_Seen
    Q1a        nan        nan         nan        Q1a
    nan        Q2a        nan         nan        Q2a
    nan        nan        Q3d         nan        Q3d
    nan        Q2c        nan         nan        Q2c

使用列方式max() - 即max(axis=1) - 允許您將所有值折疊為單個列:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({"Q1_Seen": ['Q1a', None, None, None], "Q2_Seen": [None, "Q2a", None, "Q2c"], "Q3_Seen": [None, None, "Q3d", None],"Q4_Seen": [None, None, None, None]})

In [3]: df
Out[3]: 
  Q1_Seen Q2_Seen Q3_Seen Q4_Seen
0     Q1a    None    None    None
1    None     Q2a    None    None
2    None    None     Q3d    None
3    None     Q2c    None    None

In [4]: df['Q_Seen'] = df.max(axis=1)

In [5]: df
Out[5]: 
  Q1_Seen Q2_Seen Q3_Seen Q4_Seen Q_Seen
0     Q1a    None    None    None    Q1a
1    None     Q2a    None    None    Q2a
2    None    None     Q3d    None    Q3d
3    None     Q2c    None    None    Q2c

以下對我有用:

df = pd.DataFrame({'Q1': [1, None, None], 'Q2': [None, 2, None], 'Q3': [None, None, 3]})
df['Q'] = df.concat([df['Q1'], df['Q2'], df['Q3']]).dropna()

可能會有一個更優雅的解決方案,但這首先出現在我腦海中。

暫無
暫無

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

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