[英]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.