【问题标题】:Pandas: combine multiple rows into one row based on indexPandas:根据索引将多行合并为一行
【发布时间】:2017-08-09 12:07:15
【问题描述】:

我有以下数据框:

import pandas as pd

df = pd.DataFrame({'Q10: HEDGE FUND':['NO', 'YES', 'NO'],
                   'Q10: PRIVATE EQUITY FUND': ['NO', 'YES', 'YES'],
                   'Q10: REAL ESTATE FUND': ['YES', 'NO', 'NO']}).T

                            0    1    2
Q10: HEDGE FUND            NO  YES   NO
Q10: PRIVATE EQUITY FUND   NO  YES  YES
Q10: REAL ESTATE FUND     YES   NO   NO

我想要什么:

                    0    1                    2
Q10  REAL ESTATE FUND  N/A  PRIVATE EQUITY FUND

也就是说,我想把Q10的三行合并为1,列出基金的类型。

每一列对应一种基金。第 0 列是房地产基金(请注意 Q10:REAL ESTATE FUND 行中有一个是)。第 2 列是私募股权基金(请注意 Q10:私募股权行中有一个是)。但是,第 1 列的列表有两个“是”,这是数据框中的错误。我需要将其更改为 N/A。

我试过的:对于每一列,我可以在每一列中找到“是”的位置,但我不知道如何处理第 1 列(有两个是,所以应该改为 N/A ) 而且我觉得有一种更无缝的方式来做到这一点:

df[0].tolist().index('YES')
2

【问题讨论】:

  • 我不清楚你的列是什么意思,你想要的输出是什么
  • 我添加了更多解释,希望对您有所帮助。每列是一个不同的“基金”,行告诉它是哪种类型的基金(第 1 列除外,它是数据框中的错误)。我想将此从 3 YES/NO 行更改为列出基金类型的 1 行
  • 那么如果一列中有多个YES,基本上都需要改成NO?然后看看哪些列是yes?
  • 不,如果一列中有多个是,这是一个错误,因此新数据框中的行需要读取 N/A,就像我给出的示例中一样(请参阅我想要的:)

标签: python pandas dataframe


【解决方案1】:
import pandas as pd

df = pd.DataFrame({'Q10: HEDGE FUND':['NO', 'YES', 'NO'],
               'Q10: PRIVATE EQUITY FUND': ['NO', 'YES', 'YES'],
               'Q10: REAL ESTATE FUND': ['YES', 'NO', 'NO']}).T

df2 = pd.DataFrame(index = ["Q10"], columns = [0,1,2])

df = df.transpose()
Row = []
for col in df.columns:
   if df[col].value_counts()["YES"]==1:
       Row.append(col[5:])
   else:
       Row.append("N/A")

df2.loc["Q10"] = Row 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 2022-01-13
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 2021-10-23
    • 2021-01-10
    • 2021-12-17
    相关资源
    最近更新 更多