根据特定条件填写列

时间:2018-03-21 04:49:45

标签: python python-3.x pandas

我有一个数据框#initialize suits suits <-c ("Heart", "Diamond", "Club", "Spade") cards <-c ("Ace", "King", "Queen", "Jack", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten") deck <- data.frame(suits = character(0), cards = character(0)) numOfDeck = 1 while (numOfDeck == 1){ for (i in suits){ for (j in cards){ deck <- rbind.data.frame(deck, cbind.data.frame(j, i)) } } numOfDeck = numOfDeck + 1 } hand <- sample (1:52, 5)

df1

我想要数据框Site cells national plan value T13630 G13630B 225 T13631 G13631A T13631 U13631A 57 T13672 G13672A 310 T13802 G13802A 150 T13802 G13802B 151 T13802 U13802A T13880 G13880A 274 T13880 U13880B T33281 U33281A ,以便我想填补国家计划价值&#34;列根据一些条件。

条件首先考虑具有空白国家计划值的单元格。如果任何其他单元格具有相同的站点名称(另一个单元格可以在该单元格的上方/下方),并且如果该单元格的最后一个字母匹配,例如G13631A&amp; U13631A,然后将U13631A的国家计划值复制到G13631A,否则写上#34; no-cosector&#34;。

因此我的结果数据框df2应该是这样的:

df2

3 个答案:

答案 0 :(得分:2)

创建一个新列,用于标识属于同一个类的行:

df1['ind'] = df1['Site'] + df1['cells'].str[-1]

按该列排序。这样,属于同一个类的所有行都是连续的:

df1.sort_values(['ind', 'npv'], inplace=True)

在同一个类中填写没有重复项的行:

df1.loc[~df1.duplicated(subset='ind') & df1['npv'].isnull(), 'npv'] = 'no-cosector'

在同一个类中填写具有重复项的行:

df1['npv'].ffill(inplace=True)

删除临时列:

df1.drop('ind',axis=1)

享受:

#     Site    cells          npv
#0  T13630  G13630B          225
#2  T13631  U13631A           57
#1  T13631  G13631A           57
#3  T13672  G13672A          310
#4  T13802  G13802A          150
#6  T13802  U13802A          150
#5  T13802  G13802B          151
#7  T13880  G13880A          274
#8  T13880  U13880B  no-cosector
#9  T33281  U33281A  no-cosector

答案 1 :(得分:2)

您可以使用单元格col的最后一个char构建一个列,然后使用groupby Site和最后一个char列构建一个列。最后填写na。

df_with_buckets.write.partitionBy('buckets').saveAsTable("table")

答案 2 :(得分:0)

步骤1,创建一个新列:

df["cellsend"] = df["cells"].str.slice(1)

第2步,使用sort_valuesgroupby填写na:

df.sort_values(["Site", "cellsend", "national plan value"]).groupby(["Site", "cellsend"]).ffill().drop(["cellsend"], axis=1).fillna("no-cosector")

输出:

    Site    cells       national plan value
0   T13630  G13630B     225
2   T13631  U13631A     57
1   T13631  G13631A     57
3   T13672  G13672A     310
4   T13802  G13802A     150
6   T13802  U13802A     150
5   T13802  G13802B     151
7   T13880  G13880A     274
8   T13880  U13880B     no-cosector
9   T33281  U33281A     no-cosector