Pandas:根据索引

时间:2017-08-09 12:07:15

标签: python pandas dataframe

我有以下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

                            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:PRIVATE EQUITY行中的“是”)。但是,列1有两个YES,这是数据帧中的错误。我需要将其更改为N / A.

我尝试过的内容:对于每一栏,我都可以找到“是”的位置。在每一栏中,但我不知道如何处理第1列(有两个因素,因此应该更改为N / A),我觉得这样做的方式更加无缝:

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

1 个答案:

答案 0 :(得分:0)

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