所以我基本上有一个如下所示的Pandas数据框 df :
0 1
0 123 234
1 534 42
2 213 687
3 425 123
...
20
我想做的是获取第1列的值,将00到20之间的所有数字相加,并将其与第0列中的相应值保存在新的数据帧 newdf 中。输出为应该看起来像这样:
0 1
0 123 23400
1 123 23401
2 123 23402
3 123 23403
...
20 123 23420
21 534 4200
...
我知道我必须使用循环,但是我完全迷失了如何实现自己想要的东西。到目前为止,这是我想出的:
newdf = pd.DataFrame()
for x in df[1]:
for y in range(len(df)):
for one in range(0,9):
newdf.append(df.iloc[y,0], df.iloc[y,1])
for two in range(10,20):
newdf.append(df.iloc[y,0], df.iloc[y,1])
这缺少将00到20的数字添加到第二列的值的部分,因为我什至无法使它起作用。
我希望这个问题是可以理解的。如果我在这篇文章中做错了什么,请告诉我!
答案 0 :(得分:1)
您可以通过首先在DataFrame及其后缀上执行CROSS JOIN (Cartesian Product)来实现此目的。
u = pd.DataFrame(dict(suf=range(20), key=1))
v = df.assign(key=1).merge(u, on='key').drop('key', 1)
v.iloc[:,1] = v.iloc[:,1].astype(str).add(
v.pop('suf').astype(str).str.zfill(2)).astype(int)
v.head()
0 1
0 123 23400
1 123 23401
2 123 23402
3 123 23403
4 123 23404