所以我有 2 个数据框,它们都具有相同的索引和列。我修改了第一个,我希望以某种方式索引第二个,以便它现在是第一个的长度。第一个的代码如下:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'a': ['.81', '1.2', '.67', '.78'],
'b': ['.2', '-.9', '.7', '.89'],
'c': ['.3', '.22', '.4', '.98'],
'd': ['.5', '.45', '.34', '.92']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'a': ['1', '2', '3', '4'],
'b': ['9', '7', '6', '5'],
'c': ['1', '14', '9', '5'],
'd': ['3', '12', '2', '34']},
index=[0, 1, 2, 3])
count=0
for i in df1.index:
d = pd.DataFrame()
d = df1.iloc[[count]]
count = count+1
d = d.T
d.columns = ['Dates']
try:
d.sort_values(by=['Dates'], inplace=True)
except KeyError:
print(KeyError)
d.dropna(inplace=True)
d['Dates'] = d['Dates'][:10]
print(d)
count = 0
for y in df2.index:
df = pd.DataFrame()
df = df2.iloc[[count]]
count = count+1
df = df.T
df.columns = ['Dates']
df.dropna(inplace=True)
print(df)
Df1 for 循环的输出为:
Dates
b .2
c .3
d .5
a .81
Dates
b -.9
c .22
d .45
a 1.2
Dates
d .34
c .4
a .67
b .7
Dates
a .78
b .89
d .92
c .98
Df2 的输出为:
Dates
a 1
b 9
c 1
d 3
Dates
a 2
b 7
c 14
d 12
Dates
a 3
b 6
c 9
d 2
Dates
a 4
b 5
c 5
d 34
如代码所示,我按最小到最大组织行,然后索引出索引的前 10 行。我知道在这段代码中,许多行不超过 10 个值,但我需要这样索引的原因是当我使用更大的数据集时,这将是一个问题。所以现在我想使用第一个数据帧的索引索引出第二个数据帧中的值。所以现在说如果第二个数据帧有 30 行,它现在只有 10,它基于第一个数据帧的 10。
编辑: 问题是这样的: 对于 df1.index 中的 i: #创建10个新数据帧 d = pd.DataFrame() d = df1.iloc[[计数]] 计数=计数+1 所以现在这段代码正在做的是基于一个更大的数据帧创建 10 个新的数据帧。那么如果我在第二个 for 循环中使用 .loc ,它看起来像: 对于 df2.index 中的 i: #创建10个新数据帧 df = pd.DataFrame() df = df2.iloc[[计数]] 计数=计数+1 那么如果在这个第二个 for 循环中你会说 d.loc,这将是一个问题,因为 d 等于在 for 循环中创建的最后一个数据帧,而不是全部。
答案 0 :(得分:0)
使用你的例子dataframes,假设df1
获得通过drop() ping通与该行index=2
小:
df1.drop(2,inplace=True)
df1
将现在:
a b c d
0 .81 .2 .3 .5
1 1.2 -.9 .22 .45
3 .78 .89 .98 .92
您可以修改你希望的任何方式的指数。然后,为了从选择行df2
,它是存在于df1
,可以这样做:
df2.loc[df1.index]
给你:
a b c d
0 1 9 1 3
1 2 7 14 12
3 4 5 5 34
如果只需要某些列,让我们说c
和d
:
df2.loc[df1.index,['c','d']]
给你:
c d
0 1 3
1 14 12
3 5 34