Seriesをデータフレームに連結していますが、列名(シリーズ名)が新しいデータフレームに表示されません。パンダシリーズ名がデータフレームの一部として表示されない
代わりに、最後のデータフレームに列の名前が「0」ですが、apply_joinメソッドで作成されているときにその名前が表示されます。
なぜデータフレームにシリーズ名が表示されないのですか?
import pandas as pd
from io import StringIO
tibble3_csv = """country,year,cases,population
Afghanistan,1999,745,19987071
Afghanistan,2000,2666,20595360"""
with StringIO(tibble3_csv) as fp:
tibble3 = pd.read_csv(fp)
def str_join_elements(x, sep=""):
assert type(sep) is str
return sep.join((str(xi) for xi in x))
def unite(df, cols, new_var, combine=str_join_elements):
def apply_join(x, combine):
joinstr = combine(x)
ser = pd.Series(joinstr, name=new_var)
print(ser.name)
return ser
fixed_vars = df.columns.difference(cols)
tibble = df[fixed_vars].copy()
tibble_extra = df[cols].apply(apply_join, combine=combine, axis=1)
return pd.concat([tibble, tibble_extra], axis=1)
tab = unite(tibble3, ['cases', 'population'], 'rate', combine=lambda x: str_join_elements(x, "/"))
print(tab)
結果:
rate
rate
country year 0
0 Afghanistan 1999 745/19987071
1 Afghanistan 2000 2666/20595360
を使用して、列の名前を変更しようとすることができます。これは代入ですが、 "foo/unite"のメソッドシグネチャには、渡される関数が含まれています。この場合、「結合」します。 – cumin
@cuminさて、 'pd.concat'を呼び出す前に' tibble_extra.name = 'rate''を使ってください。 :/ –
@cumin 'tibble_extra'の結果に名前がないため、元のデータフレームに名前の列がない理由はです。あなたはそれに1つを割り当てる必要があります。この名前は後で出力dfの一部になります。 –