在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。
下面给出了代码片段供您引用:
var1 = output_df['Player'].loc[output_df['Team']=='India'].reset_index(drop=True)
var2 = output_df['Player'].loc[output_df['Team']=='Australia'].reset_index(drop=True)
var3 = output_df['Player'].loc[output_df['Team']=='Algeria'].reset_index(drop=True)
更新
我的数据框中可能有“n”支球队,但我只想要来自选定球队的顶级球员。这就是为什么我在代码中手动输入团队名称的原因。我可能需要表现最好的人、表现第二好的人等等。因此无法使用 join 语句从数据框中的列中获取值。
现在我将拥有 3 个“pandas.core.series.Series”类型的变量
我已经根据另一列“分数”按降序排序了该数据框
我的要求是从每个团队中获取得分最高的球员,并创建一个输出变量,将所有球员姓名与“,”组合起来。
我尝试使用以下命令来获得所需的输出:
Final = var1[0]+','+var2[0]+','+var3[0]
它成功地产生了预期的输出,但假设如果任何变量为空 - 例如,考虑我的数据框没有来自 Algolia 的得分最高的球员,var3 将为空。因此,当我执行上一个命令时,它会出现“越界”错误
有什么方法可以执行前面的命令,或者是否有任何类似的命令必须忽略空变量,但将剩余的变量与中间的分隔符组合在一起?
更新
我在这里得到的逻辑将用于根据单词的词性标签(名词、形容词、动词等)构建句子。 Var1 将用于存储根据某些分数按降序排列的名词。 Var2 将用于存储以与名词相同的顺序排列的形容词等等...
最后,在构建字符串/句子时,我将使用这些变量来连接。例如:顶级表现名词 + 顶级表现形容词 + 顶级表现动词。第二句话将由 2nd-top-performing-noun + 2nd-top-performing-adjective ..... 现在我没有相同的代码片段。它是由团队玩家代码构建的。
希望此更新有助于更清楚地理解问题**
最佳答案
我认为您需要 concat
和 apply
来删除 dropna
的 NaN
:
var1 = pd.Series(list('abcd'))
var2 = pd.Series(list('rftyru'))
var3 = pd.Series(list('de'))
print (pd.concat([var1, var2, var3], axis=1))
0 1 2
0 a r d
1 b f e
2 c t NaN
3 d y NaN
4 NaN r NaN
5 NaN u NaN
Final = (pd.concat([var1, var2, var3], axis=1)
.apply(lambda x: ', '.join(x.dropna()), axis=1))
print (Final)
0 a, r, d
1 b, f, e
2 c, t
3 d, y
4 r
5 u
dtype: object
但最好将 groupby
与 sort_values
和 GroupBy.head
一起使用,例如 2
玩家。
要过滤团队
,请使用boolean indexing
:
#a bit changed data from another solution
df = pd.DataFrame([['Tim', 'India', 100],
['Bob', 'Australia', 50],
['John', 'Algeria', 123],
['Sarah', 'Algeria', 456],
['Jane', 'Australia', 9]],
columns=["Player", "Team", "Score"])
df1 = df[df['Team'].isin(['Algeria','India','Australia'])]
df1 = df1.sort_values('Score', ascending=False).groupby('Team').head(2)
print (df1)
Player Team Score
3 Sarah Algeria 456
2 John Algeria 123
0 Tim India 100
1 Bob Australia 50
4 Jane Australia 9
df1 = (df.sort_values('Score', ascending=False)
.groupby('Team')['Player']
.apply(lambda x: ', '.join(x.head(2)))
.reset_index())
print (df1)
Team Player
0 Algeria Sarah, John
1 Australia Bob, Jane
2 India Tim
对于第二个顶级使用GroupBy.nth
:
df1 = df.sort_values('Score', ascending=False).groupby('Team', as_index=False).nth(1)
print (df1)
Player Team Score
2 John Algeria 123
4 Jane Australia 9
关于Python - 如何组合/连接/连接 pandas 系列变量忽略空变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46342959/