我有一个数据框#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
答案 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_values
和groupby
填写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