检查循环中的条件(熊猫)

时间:2018-01-30 04:05:16

标签: python pandas

考虑以下数据框:

df = pd.DataFrame(data=np.array([['a',1, 2, 3,'T'], ['a',4, 5, 6,'F'],
                                 ['b',7, 8, 9,'T'], ['b',10, 11 , 12,'T'], ['b',13, 14 , 15,'F']])
                  , columns=['id','A', 'B', 'C','T/F'])

  id   A   B   C T/F
0  a   1   2   3   T
1  a   4   5   6   F
2  b   7   8   9   T
3  b  10  11  12   T
4  b  13  14  15   F

我想将一个条件应用于T / F列,该列将使用T标签将每个id的行复制到具有相同id的更多列。 例如,我需要以下结果:

  id   A   B   C T/F
0  a   1   2   3   T       1   2   3   T
1  a   4   5   6   F       1   2   3   T
2  b   7   8   9   T       7   8   9   T
3  b  10  11  12   T       7   8   9   T
4  b  13  14  15   F       7   8   9   T
5  b   7   8   9   T      10   11 12   T
6  b  10  11  12   T      10   11 12   T
7  b  13  14  15   F      10   11 12   T

这是我的剧本:

n = np.array(df.groupby('id').size())
m = len(df.groupby('id'))
Cnt = 0
df4 = pd.DataFrame()

for prsnNo in range(m):
    for i in range(n[prsnNo]):
        v = df.iloc[Cnt: Cnt + n[prsnNo], :].groupby('id').cumcount() == i
        df1 = df.iloc[Cnt: Cnt + n[prsnNo], :].where(v)
        temp = df4
        df4 = df.iloc[Cnt: Cnt + n[prsnNo], :].merge(df1, on="id", how="left")
        df4 = pd.concat([temp, df4])
    Cnt += n[prsnNo]

我不知道如何添加条件来检查循环中T / F列的值。如果我在循环中添加if条件,则会给出错误。

for prsnNo in range(m):
        for i in range(n[prsnNo]):
          if df[df['T/F'] =='T'] :
            v = df.iloc[Cnt: Cnt + n[prsnNo], :].groupby('id').cumcount() == i
            df1 = df.iloc[Cnt: Cnt + n[prsnNo], :].where(v)
            temp = df4
            df4 = df.iloc[Cnt: Cnt + n[prsnNo], :].merge(df1, on="id", how="left")
            df4 = pd.concat([temp, df4])
        Cnt += n[prsnNo]

谢谢,

1 个答案:

答案 0 :(得分:1)

如果订单无关紧要,您可以使用var inst = $.datepicker._getInst($('#startdate').get(0)); inst.settings.onSelect = function (dt) { // your code here }; + groupby,然后使用first和分组结果执行merge

df

v = df.groupby(['id', df['T/F'].eq('T').cumsum()])\
                 .first().reset_index(level=1, drop=True)

df = df.merge(v, left_on='id', right_index=True)  
df.columns = df.columns.str.split('_').str[0]
相关问题