我想迭代某个列(index,F_Date)中的两个数据帧(df1,df2),我使用了
for i in df2.index:
for j in df1.F_Date:
A0=df2['X'][i]
A1=df2['Y'][i]
A1=df2['Z'][i]
df1.loc[(df1['ID'] == A0) &
(df1['F_Date'] ==j ), 'Rule'] = 'A0 Occuar'
df1.loc[(df1['ID'] == A1) &
(df1['F_Date'] ==j ), 'Rule'] = 'A1 Occuar'
df1.loc[(df1['ID'] == A2) &
(df1['F_Date'] ==j ), 'Rule'] = 'A2 Occuar'
但是它进入了无限循环,我如何像尝试拆分数据时那样优化或拆分数据
split_df = np.array_split(df1, 20)
for j in split_df.F_Date:
我收到错误:AttributeError:“列表”对象没有属性“F_Date”
示例 df1
身份证 | F_日期 | 清除_日期 |
---|---|---|
AB | 2023-10-01 | 2023-10-02 |
CD | 2023-10-02 | 2023-10-03 |
EF | 2023-10-02 | 2023-10-04 |
df2
X | 是 | Z |
---|---|---|
AB | CD | EF |
我想迭代 df1 上的每一天和 df2 中的每一行,并检查 X、Y、Z 是否发生在该日期,然后如果发生则对此时间进行一些计算,输出将是最大值之间的时间差X、Y 的值和 Z 的时间。
据我了解,您可能想要这样的东西:
import pandas as pd
#sample data
df1 = pd.DataFrame({'ID': ['AB','CD', 'EF'],
'F_Date': ['2023-10-01', '2023-10-02', '2023-10-02'],
'Clear_Date': ['2023-10-02', '2023-10-03', '2023-10-04']})
df2 = pd.DataFrame({'X': ['AB'],
'Y': ['CD'],
'Z': ['EF']})
df2 = df2.reset_index(names='rowid').melt(id_vars = 'rowid', value_vars = ['X','Y', 'Z'],var_name='Event', value_name='ID')
result = df1.merge(df2)
result.loc[result['Event'] == 'X', 'Event'] = 'A0 Occuar'
result.loc[result['Event'] == 'Y', 'Event'] = 'A1 Occuar'
result.loc[result['Event'] == 'Z', 'Event'] = 'A2 Occuar'
print(result)
这产生:
ID F_Date Clear_Date rowid Event
0 AB 2023-10-01 2023-10-02 0 A0 Occuar
1 CD 2023-10-02 2023-10-03 0 A1 Occuar
2 EF 2023-10-02 2023-10-04 0 A2 Occuar
我使用
pd.melt
取消旋转第二个 df,然后您只需在 ID 上输入 pd.merge
即可获得答案。