我有一个数据框,想要遍历列c2中的所有字符串并打印该字符串以及它在列c2中出现的年份,然后在列中出现时打印第一年 c1,如果它存在于c1中。然后计算另一列中年份之间的差异。 c2中有NaN值。
示例df:
id year c1 c2
0 1999 luke skywalker han solo
1 2000 leia organa r2d2
2 2001 han solo finn
3 2002 r2d2 NaN
4 2004 finn c3po
5 2002 finn NaN
6 2005 c3po NaN
打印结果示例:
c2 year in c2 year in c1 delta
han solo 1999 2001 2
r2d2 2000 2002 2
finn 2001 2004 3
c3po 2004 2005 1
我正在使用带有python和pandas的Jupyter笔记本。谢谢!
答案 0 :(得分:1)
您可以按照以下步骤执行此操作:
df1 = df[df.c2.notnull()].copy()
s = df.groupby('c1')['year'].first()
df1['year in c1'] = df1.c2.map(s)
df1 = df1.rename(columns={'year':'year in c2'})
df1['delta'] = df1['year in c1'] - df1['year in c2']
print(df1[['c2','year in c2','year in c1', 'delta']])
输出:
c2 year in c2 year in c1 delta
0 han solo 1999 2001 2
1 r2d2 2000 2002 2
2 finn 2001 2004 3
4 c3po 2004 2005 1
答案 1 :(得分:0)
这是一种方式。
df['year_c1'] = df['c2'].map(df.groupby('c1')['year'].agg('first'))\
.fillna(0).astype(int)
df = df.rename(columns={'year': 'year_c2'})
df['delta'] = df['year_c1'] - df['year_c2']
df = df.loc[df['c2'].notnull(), ['id', 'year_c2', 'year_c1', 'delta']]
# id year_c2 year_c1 delta
# 0 0 1999 2001.0 2
# 1 1 2000 2002.0 2
# 2 2 2001 2004.0 3
# 4 4 2004 2005.0 1
<强>解释强>
c1
映射到year
,按&#34;首先&#34;汇总。c2
上使用此地图来计算year_c1
。delta
作为year_c2
和year_c1
之间的差异。null
中c2
的行并订购列。