Python:在DataFrame中,如何找到一列中的字符串出现在另一列中的年份?

时间:2018-03-08 17:30:12

标签: python pandas

我有一个数据框,想要遍历列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笔记本。谢谢!

2 个答案:

答案 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_c2year_c1之间的差异。
  • 删除nullc2的行并订购列。