簡體   English   中英

如何在 Pandas Python 中加入不同的文本行?

[英]How do I Join different lines of text in Pandas Python?

我有一個如下所示的數據框:

Date 1-Jan 2-Jan 3-Jan 4-Jan
Duty
1    Bob   NaN   Bob   NaN
2    NaN   NaN   Bob   Bob
3    NaN   NaN   Bob   Bob

我想要實現的是在每個日期添加最后一行,如果任何DutyBob ,則該值將是“Bob”,如下所示:

Date 1-Jan 2-Jan 3-Jan 4-Jan
Duty
1    Bob   NaN   Bob   NaN
2    NaN   NaN   Bob   Bob
3    NaN   NaN   Bob   Bob
sum  Bob   NaN   Bob   Bob

我嘗試的是使用pd.apply如下所示:

df.loc['sum'] = df.apply(lambda x: x.sum())

但我得到的結果是:

Date 1-Jan 2-Jan 3-Jan     4-Jan
Duty
1    Bob   NaN   Bob       NaN
2    NaN   NaN   Bob       Bob
3    NaN   NaN   Bob       Bob
sum  NaN   NaN   BobBobBob NaN

我還嘗試將每一行分成幾個小的 Dataframe 並嘗試pd.merge()它們,這也不起作用。

首先,我們檢查每列中的any值是否與Bob相等 ( eq )。 然后我們append這些值append到數據框的底部,同時映射True > BobFalse > NaN

m = df.eq('Bob').any(axis=0).map({True: 'Bob', False: np.NaN})
df = df.append(pd.DataFrame(m, columns=['sum']).T)

輸出

    1-Jan 2-Jan 3-Jan 4-Jan
0     Bob   NaN   Bob   NaN
1     NaN   NaN   Bob   Bob
2     NaN   NaN   Bob   Bob
sum   Bob   NaN   Bob   Bob

如果每列需要第一個非缺失值,請使用Series.dropnanextiter作為可能的設置默認值,如果不存在第一個值:

df.loc['sum'] = df.apply(lambda x: next(iter(x.dropna()),np.nan))
print (df)
     1-Jan  2-Jan 3-Jan 4-Jan
Date                         
1      Bob    NaN   Bob   NaN
2      NaN    NaN   Bob   Bob
3      NaN    NaN   Bob   Bob
sum    Bob    NaN   Bob   Bob

或者將DataFrame.stackGroupBy.first DataFrame.stack使用:

df.loc['sum'] = df.stack().groupby(level=1).first()
print (df)
     1-Jan  2-Jan 3-Jan 4-Jan
Date                         
1      Bob    NaN   Bob   NaN
2      NaN    NaN   Bob   Bob
3      NaN    NaN   Bob   Bob
sum    Bob    NaN   Bob   Bob

如果需要測試值Bob

df.loc['sum'] =  df.eq('Bob').any().map({True: 'Bob', False: np.nan})
print (df)
     1-Jan  2-Jan 3-Jan 4-Jan
Date                         
1      Bob    NaN   Bob   NaN
2      NaN    NaN   Bob   Bob
3      NaN    NaN   Bob   Bob
sum    Bob    NaN   Bob   Bob

暫無
暫無

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

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