Python 熊猫:基于索引将多行合并为一行
我有以下数据帧:Python 熊猫:基于索引将多行合并为一行,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: 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
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:房地产基金行中有一个是)。第2列是私募股权基金(请注意,Q10:私募股权行中有一个是)。但是,列1列出了两个是,这是数据帧中的一个错误。我需要把这个改成不适用
我尝试过的:对于每一列,我都能找到“是”在每一列中的位置,但我不知道如何处理第1列(它有两个“是”,所以应该改为“不适用”),我觉得有一种更无缝的方法可以做到这一点:
df[0].tolist().index('YES')
2
我不清楚你们的专栏是什么意思,你们想要的输出是什么。我已经添加了更多的解释,希望这能有所帮助。每一列都是一个不同的“基金”,行告诉它是哪种类型的基金(第1列除外,这是数据框中的一个错误)。我想把3行YES/NO改为1行,列出基金的类型,所以如果一列中有多个YES,它们基本上都需要改为NO?然后查看哪些列是“是”?否,如果一列中有多个“是”,则这是一个错误,因此新数据帧中的行需要读取N/a,如我给出的示例所示(请参阅我想要的:)
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