【问题标题】:How to combine two rows in single row in pandas如何在熊猫中将两行组合成单行
【发布时间】:2020-06-30 06:35:29
【问题描述】:

我有一张以这种方式排列数据的 Excel 表格

我希望它是这样的

【问题讨论】:

标签: python pandas pandas-groupby


【解决方案1】:

不幸的是,您将不得不遍历行和列来选择非空单元格。这是您的表格的简化版本。

import pandas as pd
df =pd.DataFrame({
'em':['em1','em2','em3','em1','em2','em3'],
'a':['a1','a2','a3','','',' '],
'b':['','','','b1','b2','b3']
})
print(df)
df2 =pd.DataFrame()
for em in set(df['em']):
    df_em = df[df['em']==em]
    df2 = df2.append(df_em.iloc[[0]], ignore_index = True)
    for c in range(len(df.columns)):
        if df_em.iat[0,c].strip() == '':                    
            df2.iat[len(df2)-1,c] = df_em.iat[1,c]
        else:
            df2.iat[len(df2)-1,c] = df_em.iat[0,c]
                
print('\n\n',df2)

输出:

    em   a   b
0  em1  a1
1  em2  a2
2  em3  a3
3  em1      b1
4  em2      b2
5  em3      b3


    em   a   b
0  em1  a1  b1
1  em2  a2  b2
2  em3  a3  b3

【讨论】:

    【解决方案2】:

    如果您的 NameEmailSubject 列对于匹配的行是相等的,并且您知道要“合并”的行组的索引,您可以尝试以下步骤:

    1. 将这 3 列设为数据框的索引。
    2. 使用combine_first 填充来自不同行组的空值。

    在您的情况下,行组是前三个和后三个。

    new_df = df.set_index(["Name", "Email", "Subject"])
    
    # Combine first 3 rows with last 3
    combined = new_df.iloc[:3].combine_first(new_df.iloc[3:])
    

    结果:

                                                Q.1 Q.2 Q.3 Q.4 Q.5 Q.6 Q.7 Q.8
    Name       Email                    Subject                                
    MOHD AQUIL aquilchoudhary@gmail.com History   B   C   B   A   B   A   B   D
    Shweta     Rangarishweta@gmail.co   History   B   A   B   D   B   C   B   A
    Suraj      surajdas112@gmail.com    History   B   A   B   B   B   A   B   B
    

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 1970-01-01
      • 2023-02-05
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多